Archive

Archive for March, 2012

5PC2XX: Rename S5pc2XX to exynos

March 16th, 2012 No comments

最新的Samsung的 Cortex-A9 和Cortex-A15的目录分别改为Exynos4和Exynos5, 简单记录一下,以免忘记。

As per new naming convention for Samsung SoC’s, all Cortex-A9 and Cortex-A15
based SoC’s will be classified under the name Exynos. Cortex-A9 and Cortex-A15
based SoC’s will be sub-classified as Exynos4 and Exynos5 respectively.

In order to better adapt and reuse code across various upcoming Samsung Exynos
based boards, all uses of s5pc210 prefix/suffix/directory-names are renamed in
this patch. s5pc210 is renamed as exynos4210 and S5PC210/s5pc210 suffix/prefix
are renamed as exynos4/EXYNOS4.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
---
Changes for v2:
       - Removed renaming of s5p-common to exynos4-common
       - Renamed s5pc210 prefixes to exynos4210
Changes for v3:
       - Dropped number 4 in exenos4.
 
Rebased on following commit.
19cdfd3e84bff108febb127b598ac3f1634c768c
"Ethernut 5 board support"
 
 MAINTAINERS                                        |    6 +-
 Makefile                                           |    2 +-
 arch/arm/cpu/armv7/{s5pc2xx => exynos}/Makefile    |    0
 arch/arm/cpu/armv7/{s5pc2xx => exynos}/clock.c     |   50 ++++++++--------
 arch/arm/cpu/armv7/{s5pc2xx => exynos}/soc.c       |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/adc.h        |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/clk.h        |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/clock.h      |    2 +-
 .../asm/{arch-s5pc2xx => arch-exynos}/cpu.h        |   64 ++++++++++----------
 .../asm/{arch-s5pc2xx => arch-exynos}/gpio.h       |   28 ++++----
 .../asm/{arch-s5pc2xx => arch-exynos}/mmc.h        |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/pwm.h        |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/sromc.h      |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/sys_proto.h  |    0
 .../asm/{arch-s5pc2xx => arch-exynos}/uart.h       |    0
 board/samsung/origen/lowlevel_init.S               |   26 ++++----
 board/samsung/origen/mem_setup.S                   |   12 ++--
 board/samsung/origen/origen.c                      |    8 +-
 board/samsung/origen/origen_setup.h                |    8 +-
 board/samsung/smdkv310/lowlevel_init.S             |   22 ++++----
 board/samsung/smdkv310/mem_setup.S                 |    8 +-
 board/samsung/smdkv310/smdkv310.c                  |    8 +-
 board/samsung/universal_c210/lowlevel_init.S       |   24 ++++----
 board/samsung/universal_c210/universal.c           |    8 +-
 boards.cfg                                         |    6 +-
 include/configs/origen.h                           |    6 +-
 include/configs/s5pc210_universal.h                |   10 ++--
 include/configs/smdkv310.h                         |    6 +-
 28 files changed, 152 insertions(+), 152 deletions(-)
 rename arch/arm/cpu/armv7/{s5pc2xx => exynos}/Makefile (100%)
 rename arch/arm/cpu/armv7/{s5pc2xx => exynos}/clock.c (81%)
 rename arch/arm/cpu/armv7/{s5pc2xx => exynos}/soc.c (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/adc.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/clk.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/clock.h (99%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/cpu.h (64%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/gpio.h (84%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/mmc.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/pwm.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/sromc.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/sys_proto.h (100%)
 rename arch/arm/include/asm/{arch-s5pc2xx => arch-exynos}/uart.h (100%)
 
diff --git a/MAINTAINERS b/MAINTAINERS
index 37bbb34..d493e4e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -691,12 +691,12 @@ Minkyu Kang <mk7.kang@samsung.com>
 
       SMDKC100                ARM ARMV7 (S5PC100 SoC)
       s5p_goni                ARM ARMV7 (S5PC110 SoC)
-       s5pc210_universal       ARM ARMV7 (S5PC210 SoC)
+       s5pc210_universal       ARM ARMV7 (EXYNOS4210 SoC)
 
 Chander Kashyap <k.chander@samsung.com>
 
-       origen                  ARM ARMV7 (S5PC210 SoC)
-       SMDKV310                ARM ARMV7 (S5PC210 SoC)
+       origen                  ARM ARMV7 (EXYNOS4210 SoC)
+       SMDKV310                ARM ARMV7 (EXYNOS4210 SoC)
.
.
.

From: linaro-dev@lists.linaro.org
Source: http://lists.linaro.org/pipermail/linaro-dev/2011-December/009015.html

–EOF–

GT-P6800 Kernel Building Error missing terminating ” character

March 16th, 2012 No comments

从三星的https://opensource.samsung.com下载了GT-6800的源码,自己编译了一下,结果Kernel出了个奇怪的错误: ‘error: missing terminating ” character’ 和 ‘error: expected expression before ‘)’ token’, 在网上搜了一圈找到一个解决方法,是因为系统使用的是中文,如果设在为英文环境就好了。

具体错误信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ make c210_p8_rev01_defconfig
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ make
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”是最新的。
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CC      drivers/media/video/samsung/mali/common/mali_kernel_core.o
arm-none-linux-gnueabi-gcc: ": No such file or directory
<command-line>:0: warning: missing terminating " character
drivers/media/video/samsung/mali/common/mali_kernel_core.c: In function 'mali_kernel_constructor':
drivers/media/video/samsung/mali/common/mali_kernel_core.c:172: error: missing terminating " character
drivers/media/video/samsung/mali/common/mali_kernel_core.c:172: error: expected expression before ')' token
make[5]: *** [drivers/media/video/samsung/mali/common/mali_kernel_core.o] 错误 1
make[4]: *** [drivers/media/video/samsung/mali] 错误 2
make[3]: *** [drivers/media/video/samsung] 错误 2
make[2]: *** [drivers/media/video] 错误 2
make[1]: *** [drivers/media] 错误 2
make: *** [drivers] 错误 2

查看一下 drivers/media/video/samsung/mali/common/mali_kernel_core.c 的代码和宏:

1
2
3
4
5
6
    err  = initialize_subsystems();
    if (_MALI_OSK_ERR_OK != err) goto error3;
 
    MALI_PRINT(("Mali device driver %s loaded\n", SVN_REV_STRING));   // 172 line
 
    MALI_SUCCESS;

宏:

1
2
3
4
#define MALI_PRINT(args) do{ \
	MALI_PRINTF(("Mali: ")); \
	MALI_PRINTF(args); \
	} while (0)

看代码没有什么问题, 参考了这里的解决方法: http://bbs.chinaunix.net/thread-2317413-1-1.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
 
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ export LANG=en_US.UTF-8
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ export LANGUAGE=en_US:en
 
border@b0rder:/bvcom/P6800/GT-P6800_CHN_HC_Opensource/GT-P6800_CHN_Kernel$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

重新设置了locale,就可以正常编译通过了,真是奇怪。

参考: http://bbs.chinaunix.net/thread-2317413-1-1.html

–EOF–

How To Improving Android Boot Time

March 13th, 2012 No comments

Boot Sequence Overview
* bootloader
* kernel
* init
—- loads several daemons and services, including zygote
—- see /init.rc and init..rc

* zygote
—- preloads classes
—- starts package manager

* service manager
—- start services

提高Android系统启动时间, 这里只说优化Android的启动时间,不包括bootloader和Kernel的。

1. 精简init init.rc 和 init..rc
a. export ANDROID_BOOTLOGO 0 // 去掉启动画面.
b. bootanim // 去掉启动动画服务.
c. 由于设备里面没有蓝牙, wifi,所以去掉驱动了蓝牙,wifi相关的服务.

2. zygote preloads classes
在frameworks/base/core/java/com/android/internal/os/ZygoteInit.java文件里面,去掉class加载或者资源加载。 在我的s5pv210 A8板子上只提高了3秒,如果你的CPU比较差的话可能提供的更多。

+            /*
+             * Disable By: Bian Jiang 2012.2.24
             preloadClasses();
             //cacheRegisterMaps();
             preloadResources();
+            */

3. package manager
如果我们的设备是个平板没有phone,sms功能就可以去掉不用的package包来提供Android启动时间。
修改./build/target/product/AndroidProducts.mk 文件中的PRODUCT_PACKAGES来消减多余的package包.
去掉系统默认的Launcher2, 换成我们自己的BootStart.
根据我们的设备修剪如下:

PRODUCT_PACKAGES := \
    bouncycastle \
    com.android.location.provider \
    com.android.location.provider.xml \
    core \
    core-junit \
    dalvikvm \
    dexdeps \
    dexdump \
    dexlist \
    dexopt \
    dmtracedump \
    dvz \
    dx \
    ext \
    libdvm \
    libexpat \
    libicui18n \
    libicuuc \
    libjavacore \
    libnativehelper \
    libsqlite_jni \
    libssl \
    libz \
    hprof-conv \
    icu.dat \
    jasmin \
    jasmin.jar \
    libcrypto \
    libdex \
    CertInstaller \
    DrmProvider \
    framework-res \
    ApplicationsProvider \
    DownloadProvider \
    MediaProvider \
    SettingsProvider \
    UserDictionaryProvider \
    DefaultContainerService \
    bcm31 \
    BootStart

修改完后最好把根目录的out目录删掉,然后再整个项目编译一下。
如果编译没有错,继续进行下一步。通过消减package速度只提高了1秒左右。

5. service manager
通过修改./frameworks/base/services/java/com/android/server/SystemService.java 消减不必要的service.
根据我的设备我只保留了以下几个服务:
下面的6个服务是必须的:
*Power Manager*
*Activity Manager*
*Package Manager*
*Battery Service*
*Windows Manager*
*Connectivity Service*

下面的服务可以根据你的需求增加或者裁剪:
Entropy Service
Content Manager
System Content Providers
Lights Service
Vibrator Service
Mount Service
USB Observer
AppWidgert Service
DiskStats Service

消减服务的时候最好从服务的后面往前消减,以为各各服务之间有时是有关联的。每消减一两个服务最好编译一下,然后放到板子上跑跑,看看有没有错误信息,能不能正常进入主界面,如果不能就查看logcat日志,修复掉相关的错误信息。大部分错误信息都是空指针null, 只要加些判断就可以修复。去掉相关的服务信息提高了1s左右。

更详细的信息参考附件中的boottime.patch

6. 去掉对zip文件的检查

frameworks/base/libs/utils/ZipFileRO.cpp
@@ -349,11 +349,14 @@ bool ZipFileRO::parseZipArchive(void)
             goto bail;
         }
 
+        /* FIXTHIS - skip signature check for now
+         * Disable By: Bian Jiang 2012.2.24
         long localHdrOffset = (long) get4LE(ptr + kCDELocalOffset);
         if (localHdrOffset &gt;= mDirectoryOffset) {
             LOGW("bad LFH offset %ld at entry %d\n", localHdrOffset, i);
             goto bail;
         }
+        */

7. 还有就是我的uboot默认等待3秒,通过修改uboot里面的CONFIG_BOOTDELAY设置为等待1秒。
具体文件在: ./include/configs/smdkc110n_mtd.h

总结:
1. 在我的s5pc110的板子上从启动时间19s优化到11s左右。
2. Kernel还有一定的优化空间,至少能再提高2秒.

下载:
boottime.patch
Android-bootup-time-linuxcon-2010-08
BootStart APP

参考:
1. Using Bootchart on Android
http://elinux.org/Using_Bootchart_on_Android

2. Improving Android Boot Time Outline
http://elinux.org/Improving_Android_Boot_Time_Outline

3. Bootchart on Android
http://androidzaurus.seesaa.net/article/111434080.html

4. How to make bootchart for GingerBread
http://blog.csdn.net/magicyu2/article/details/6292440

 

patch 也贴一份:

diff --git a/build/target/product/core.mk b/build/target/product/core.mk
index 3b5a42c..4d9ed7e 100755
--- a/build/target/product/core.mk
+++ b/build/target/product/core.mk
@@ -76,13 +76,13 @@ PRODUCT_PROPERTY_OVERRIDES := \
     DefaultContainerService \
     Bugreport
 
+
 PRODUCT_PACKAGES := \
     bouncycastle \
     com.android.location.provider \
     com.android.location.provider.xml \
     core \
     core-junit \
-    create_test_dmtrace \
     dalvikvm \
     dexdeps \
     dexdump \
@@ -92,13 +92,6 @@ PRODUCT_PACKAGES := \
     dvz \
     dx \
     ext \
-    framework-res \
-    hprof-conv \
-    icu.dat \
-    jasmin \
-    jasmin.jar \
-    libcrypto \
-    libdex \
     libdvm \
     libexpat \
     libicui18n \
@@ -108,29 +101,26 @@ PRODUCT_PACKAGES := \
     libsqlite_jni \
     libssl \
     libz \
-    sqlite-jdbc \
-    Browser \
-    Home \
-    HTMLViewer \
+    hprof-conv \
+    icu.dat \
+    jasmin \
+    jasmin.jar \
+    libcrypto \
+    libdex \
+    CertInstaller \
+    DrmProvider \
+    framework-res \
     ApplicationsProvider \
+    DownloadProvider \
     MediaProvider \
     SettingsProvider \
     UserDictionaryProvider \
-    DefaultContainerService
+    DefaultContainerService \
+	BootStart
 
-#Phone \
-    libnfc_ndef \
-    PicoTts \
-    ContactsProvider \
-    Contacts \
-    DownloadProvider \
-    DownloadProviderUi \
-    TelephonyProvider \
-    TtsService \
-    VpnServices \
-    PackageInstaller \
-    Bugreport
+    #Launcher2
+	#BootStart
 
 # host-only dependencies
 ifeq ($(WITH_HOST_DALVIK),true)
diff --git a/build/target/product/full.mk b/build/target/product/full.mk
index c204aad..9736ca3 100755
--- a/build/target/product/full.mk
+++ b/build/target/product/full.mk
@@ -19,7 +19,7 @@
 # build of the emulator, but all those aspects can be overridden
 # in inherited configurations.
 
-PRODUCT_PACKAGES := \
+#PRODUCT_PACKAGES := \
     OpenWnn \
     PinyinIME \
     VoiceDialer \
@@ -27,6 +27,13 @@ PRODUCT_PACKAGES := \
     libWnnJpnDic \
     libwnndict
 
+# Disable By: Bian Jiang 2012.2.26
+PRODUCT_PACKAGES := \
+    OpenWnn \
+    libWnnEngDic \
+    libwnndict
+
+
 # Additional settings used in all AOSP builds
 PRODUCT_PROPERTY_OVERRIDES := \
     keyguard.no_require_sim=true \
diff --git a/build/target/product/generic.mk b/build/target/product/generic.mk
index 13970f9..06e358c 100755
--- a/build/target/product/generic.mk
+++ b/build/target/product/generic.mk
@@ -49,7 +49,6 @@
 
 #    AccountAndSyncSettings \
     Music \
-    CertInstaller \
     PstnPhone \
     DeskClock \
     AlarmProvider \
@@ -67,14 +66,14 @@
     CalendarProvider \
     SyncProvider \
     Updater \
-    DrmProvider \
+    Settings \
 
-PRODUCT_PACKAGES := \
-    Camera \
+
+
+#    Camera \
     CameraVideo \
     LatinIME \
     Launcher2 \
-    Settings \
     SystemUI
 
diff --git a/build_android.sh b/build_android.sh
index 5e75d99..3806ada 100755
--- a/build_android.sh
+++ b/build_android.sh
@@ -3,6 +3,9 @@
 CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
 CLIENT=$(whoami)
 
+# Enable BootChart By: Bian Jiang 2012.2.23
+export INIT_BOOTCHART=true
+
 ROOT_DIR=$(pwd)
 KERNEL_DIR=../kernel-tss
 
diff --git a/device/samsung/smdkc110/device.mk b/device/samsung/smdkc110/device.mk
index b35f686..00a437e 100644
--- a/device/samsung/smdkc110/device.mk
+++ b/device/samsung/smdkc110/device.mk
@@ -111,8 +111,9 @@ PRODUCT_PACKAGES += \
 	libcamera \
 	libstagefrighthw
 
+# Disable By: Bian Jiang 2012.2.27
 # Apps
-PRODUCT_PACKAGES += \
+#PRODUCT_PACKAGES += \
 	VoiceDialer \
 	SpeechRecorder \
 	LiveWallpapersPicker \
@@ -121,10 +122,16 @@ PRODUCT_PACKAGES += \
 	VisualizationWallpapers \
 	librs_jni
 
+PRODUCT_PACKAGES += \
+	MagicSmokeWallpapers \
+	librs_jni
+
+
 # These are the hardware-specific features
 PRODUCT_COPY_FILES += \
-	frameworks/base/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \
-	packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:system/etc/permissions/android.software.live_wallpaper.xml
+	frameworks/base/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml 
+
+#	packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:system/etc/permissions/android.software.live_wallpaper.xml
 
 # The OpenGL ES API level that is natively supported by this device.
 # This is a 16.16 fixed point number
diff --git a/device/samsung/smdkc110/init.rc b/device/samsung/smdkc110/init.rc
index 73ba7dd..d6de087 100644
--- a/device/samsung/smdkc110/init.rc
+++ b/device/samsung/smdkc110/init.rc
@@ -5,13 +5,13 @@ on init
 
 sysclktz 0
 
-#loglevel 3
-loglevel 7
+loglevel 3
+#loglevel 7
 
 # setup the global environment
     export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
     export LD_LIBRARY_PATH /vendor/lib:/system/lib
-    export ANDROID_BOOTLOGO 1
+    export ANDROID_BOOTLOGO 0
     export ANDROID_ROOT /system
     export ANDROID_ASSETS /system/app
     export ANDROID_DATA /data
@@ -94,13 +94,13 @@ on fs
 # mount mtd partitions
     # Mount /system rw first to give the filesystem a chance to save a checkpoint
     mount yaffs2 mtd@system /system
-    mount yaffs2 mtd@system /system ro remount
+#mount yaffs2 mtd@system /system ro remount
     mount yaffs2 mtd@userdata /data nosuid nodev
     mount yaffs2 mtd@cache /cache nosuid nodev
 
 on post-fs
     # once everything is setup, no need to modify /
-    mount rootfs rootfs / ro remount
+#mount rootfs rootfs / ro remount
 
     # We chown/chmod /data again so because mount is run as root + defaults
     chown system system /data
@@ -336,11 +336,11 @@ service media /system/bin/mediaserver
     group system audio camera graphics inet net_bt net_bt_admin net_raw
     ioprio rt 4
 
-service bootanim /system/bin/bootanimation
-    user graphics
-    group graphics
-    disabled
-    oneshot
+#service bootanim /system/bin/bootanimation
+#    user graphics
+#    group graphics
+#    disabled
+#    oneshot
 
 service dbus /system/bin/dbus-daemon --system --nofork
     socket dbus stream 660 bluetooth bluetooth
diff --git a/device/samsung/smdkc110/setup-makefiles.sh b/device/samsung/smdkc110/setup-makefiles.sh
index e2b0501..622cf00 100644
--- a/device/samsung/smdkc110/setup-makefiles.sh
+++ b/device/samsung/smdkc110/setup-makefiles.sh
@@ -36,17 +36,23 @@ mkdir -p ../../../vendor/$MANUFACTURER/$DEVICE
 
 # This file is generated by device/__MANUFACTURER__/__DEVICE__/setup-makefiles.sh
 
+# Disable By: Bian Jiang 2012.2.26
 # Live wallpaper packages
-PRODUCT_PACKAGES := \\
-    LiveWallpapers \\
-    LiveWallpapersPicker \\
-    MagicSmokeWallpapers \\
-    VisualizationWallpapers \\
+#PRODUCT_PACKAGES := \
+#    LiveWallpapers \
+#    LiveWallpapersPicker \
+#    MagicSmokeWallpapers \
+#    VisualizationWallpapers \
+#    librs_jni
+
+PRODUCT_PACKAGES := \
+    MagicSmokeWallpapers \
     librs_jni
 
+
 # Publish that we support the live wallpaper feature.
-PRODUCT_COPY_FILES := \\
-    packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:/system/etc/permissions/android.software.live_wallpaper.xml
+#PRODUCT_COPY_FILES := \\
+#    packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:/system/etc/permissions/android.software.live_wallpaper.xml
 
 # Pick up overlay for features that depend on non-open-source files
 DEVICE_PACKAGE_OVERLAYS := vendor/__MANUFACTURER__/__DEVICE__/overlay
diff --git a/device/samsung/smdkv210/device.mk b/device/samsung/smdkv210/device.mk
index 421f03f..6845533 100644
--- a/device/samsung/smdkv210/device.mk
+++ b/device/samsung/smdkv210/device.mk
@@ -112,7 +112,7 @@ PRODUCT_PACKAGES += \
 	libstagefrighthw
 
 # Apps
-PRODUCT_PACKAGES += \
+#PRODUCT_PACKAGES += \
 	VoiceDialer \
 	SpeechRecorder \
 	LiveWallpapersPicker \
@@ -123,8 +123,9 @@ PRODUCT_PACKAGES += \
 
 # These are the hardware-specific features
 PRODUCT_COPY_FILES += \
-	frameworks/base/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \
-	packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:system/etc/permissions/android.software.live_wallpaper.xml
+	frameworks/base/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml
+	
+#	packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:system/etc/permissions/android.software.live_wallpaper.xml
 
 # The OpenGL ES API level that is natively supported by this device.
 # This is a 16.16 fixed point number
diff --git a/frameworks/base/core/java/android/app/ActivityThread.java b/frameworks/base/core/java/android/app/ActivityThread.java
index 78df780..8add7a3 100644
--- a/frameworks/base/core/java/android/app/ActivityThread.java
+++ b/frameworks/base/core/java/android/app/ActivityThread.java
@@ -3505,6 +3505,14 @@ public final class ActivityThread {
                 final java.lang.ClassLoader cl = c.getClassLoader();
                 localProvider = (ContentProvider)cl.
                     loadClass(info.name).newInstance();
+
+                if (localProvider == null) {
+                     Slog.e(TAG, "LocalProvider Failed to instantiate class " +
+                          info.name + " from sourceDir " +
+                          info.applicationInfo.sourceDir);
+                    return null;
+                }
+
                 provider = localProvider.getIContentProvider();
                 if (provider == null) {
                     Slog.e(TAG, "Failed to instantiate class " +
diff --git a/frameworks/base/core/java/android/app/NotificationManager.java b/frameworks/base/core/java/android/app/NotificationManager.java
index 1fae516..9b37723 100644
--- a/frameworks/base/core/java/android/app/NotificationManager.java
+++ b/frameworks/base/core/java/android/app/NotificationManager.java
@@ -135,6 +135,9 @@ public class NotificationManager
     {
         INotificationManager service = getService();
         String pkg = mContext.getPackageName();
+        if (service == null || pkg == null) {
+            return;
+        }
         if (localLOGV) Log.v(TAG, pkg + ": cancel(" + id + ")");
         try {
             service.cancelNotificationWithTag(pkg, tag, id);
@@ -150,6 +153,9 @@ public class NotificationManager
     {
         INotificationManager service = getService();
         String pkg = mContext.getPackageName();
+        if (service == null || pkg == null) {
+            return;
+        }
         if (localLOGV) Log.v(TAG, pkg + ": cancelAll()");
         try {
             service.cancelAllNotifications(pkg);
diff --git a/frameworks/base/core/java/android/content/ContentService.java b/frameworks/base/core/java/android/content/ContentService.java
index fc2dfc0..de1cdf1 100644
--- a/frameworks/base/core/java/android/content/ContentService.java
+++ b/frameworks/base/core/java/android/content/ContentService.java
@@ -40,7 +40,7 @@ import java.util.List;
 public final class ContentService extends IContentService.Stub {
     private static final String TAG = "ContentService";
     private Context mContext;
-    private boolean mFactoryTest;
+    private boolean mFactoryTest = false;
     private final ObserverNode mRootNode = new ObserverNode("");
     private SyncManager mSyncManager = null;
     private final Object mSyncManagerLock = new Object();
@@ -457,6 +457,8 @@ public final class ContentService extends IContentService.Stub {
     }
 
     public static IContentService main(Context context, boolean factoryTest) {
+        // Add By: Bian Jiang 2012.2.29
+        factoryTest = true;
         ContentService service = new ContentService(context, factoryTest);
         ServiceManager.addService(ContentResolver.CONTENT_SERVICE_NAME, service);
         return service;
diff --git a/frameworks/base/core/java/android/content/SyncManager.java b/frameworks/base/core/java/android/content/SyncManager.java
index 26b6ad7..ed2d0af 100644
--- a/frameworks/base/core/java/android/content/SyncManager.java
+++ b/frameworks/base/core/java/android/content/SyncManager.java
@@ -309,6 +309,9 @@ public class SyncManager implements OnAccountsUpdateListener {
         mSyncStorageEngine = SyncStorageEngine.getSingleton();
         mSyncQueue = new SyncQueue(mSyncStorageEngine);
 
+        // Add By: Bian Jiang 2012.2.29
+        factoryTest = true;
+
         mContext = context;
 
         HandlerThread syncThread = new HandlerThread("SyncHandlerThread",
diff --git a/frameworks/base/core/java/android/view/accessibility/AccessibilityManager.java b/frameworks/base/core/java/android/view/accessibility/AccessibilityManager.java
index 0186270..ba0c30c 100644
--- a/frameworks/base/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/frameworks/base/core/java/android/view/accessibility/AccessibilityManager.java
@@ -58,7 +58,7 @@ public final class AccessibilityManager {
 
     final Handler mHandler;
 
-    boolean mIsEnabled;
+    boolean mIsEnabled = false;
 
     final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() {
         public void setEnabled(boolean enabled) {
@@ -110,6 +110,10 @@ public final class AccessibilityManager {
         IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE);
         mService = IAccessibilityManager.Stub.asInterface(iBinder);
         try {
+            if (mService == null) {
+                mIsEnabled = false;
+                return;
+            }
             mService.addClient(mClient);
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);
diff --git a/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java b/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
index e30687f..d7ff8c0 100644
--- a/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
@@ -904,7 +904,7 @@ public final class InputMethodManager {
 
             // Make sure we have a window token for the served view.
             if (DEBUG) Log.v(TAG, "Starting input: view=" + view);
-            if (view == null) {
+            if (view == null || mService == null) {
                 if (DEBUG) Log.v(TAG, "ABORT input: no served view!");
                 return;
             }
@@ -1146,6 +1146,9 @@ public final class InputMethodManager {
             try {
                 final boolean isTextEditor = focusedView != null &amp;&amp;
                         focusedView.onCheckIsTextEditor();
+                if (mService == null) {
+                    return;
+                }
                 mService.windowGainedFocus(mClient, rootView.getWindowToken(),
                         focusedView != null, isTextEditor, softInputMode, first,
                         windowFlags);
diff --git a/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java b/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
index f0e5517..9072caf 100644
--- a/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
+++ b/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
@@ -561,9 +561,14 @@ public class ZygoteInit {
             registerZygoteSocket();
             EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
                 SystemClock.uptimeMillis());
+
+            /* 
+             * Disable By: Bian Jiang 2012.2.24
             preloadClasses();
             //cacheRegisterMaps();
             preloadResources();
+            */
+
             EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
                 SystemClock.uptimeMillis());
 
diff --git a/frameworks/base/libs/utils/ZipFileRO.cpp b/frameworks/base/libs/utils/ZipFileRO.cpp
index 4261196..a5d515b 100644
--- a/frameworks/base/libs/utils/ZipFileRO.cpp
+++ b/frameworks/base/libs/utils/ZipFileRO.cpp
@@ -349,11 +349,14 @@ bool ZipFileRO::parseZipArchive(void)
             goto bail;
         }
 
+        /* FIXTHIS - skip signature check for now
+         * Disable By: Bian Jiang 2012.2.24
         long localHdrOffset = (long) get4LE(ptr + kCDELocalOffset);
         if (localHdrOffset &gt;= mDirectoryOffset) {
             LOGW("bad LFH offset %ld at entry %d\n", localHdrOffset, i);
             goto bail;
         }
+        */
 
         unsigned int fileNameLen, extraLen, commentLen, hash;
 
diff --git a/frameworks/base/packages/SettingsProvider/res/xml/bookmarks.xml b/frameworks/base/packages/SettingsProvider/res/xml/bookmarks.xml
index dfaeeaf..b695afe 100644
--- a/frameworks/base/packages/SettingsProvider/res/xml/bookmarks.xml
+++ b/frameworks/base/packages/SettingsProvider/res/xml/bookmarks.xml
@@ -15,6 +15,7 @@
 --&gt;
 
+<!--
     <bookmark          package="com.android.browser"          class="com.android.browser.BrowserActivity" @@ -39,12 +40,10 @@          package="com.android.calendar"          class="com.android.calendar.LaunchActivity"          shortcut="l" />
-<!--
     <bookmark          package="com.google.android.apps.maps"          class="com.google.android.maps.MapsActivity"          shortcut="m" />
--->
 
+--&gt;
 
diff --git a/frameworks/base/services/java/com/android/server/ConnectivityService.java b/frameworks/base/services/java/com/android/server/ConnectivityService.java
index a663c3a..f51fb32 100644
--- a/frameworks/base/services/java/com/android/server/ConnectivityService.java
+++ b/frameworks/base/services/java/com/android/server/ConnectivityService.java
@@ -66,7 +66,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
             "android.telephony.apn-restore";
 
-    private Tethering mTethering;
+    private Tethering mTethering = null;
     private boolean mTetheringConfigValid = false;
 
     /**
@@ -385,13 +385,14 @@ public class ConnectivityService extends IConnectivityManager.Stub {
             }
         }
 
+        /*
         mTethering = new Tethering(mContext, mHandler.getLooper());
         mTetheringConfigValid = (((mNetTrackers[ConnectivityManager.TYPE_MOBILE_DUN] != null) ||
                                   !mTethering.isDunRequired()) &amp;&amp;
                                  (mTethering.getTetherableUsbRegexs().length != 0 ||
                                   mTethering.getTetherableWifiRegexs().length != 0) &amp;&amp;
                                  mTethering.getUpstreamIfaceRegexs().length != 0);
-
+        */
         if (DBG) {
             mInetLog = new ArrayList();
         }
@@ -953,6 +954,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
      */
     private void handleDisconnect(NetworkInfo info) {
 
+        if (info == null) {
+            return;
+        }
         int prevNetType = info.getType();
 
         mNetTrackers[prevNetType].setTeardownRequested(false);
@@ -974,6 +978,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
         }
 
         Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
+        if (intent == null) {
+            return;
+        }
         intent.putExtra(ConnectivityManager.EXTRA_NETWORK_INFO, info);
         if (info.isFailover()) {
             intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
@@ -1457,7 +1464,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
         }
         pw.println();
 
-        mTethering.dump(fd, pw, args);
+        if (mTethering != null) {
+            mTethering.dump(fd, pw, args);
+        }
 
         if (mInetLog != null) {
             pw.println();
@@ -1599,7 +1608,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
     public int tether(String iface) {
         enforceTetherChangePermission();
 
-        if (isTetheringSupported()) {
+        if (isTetheringSupported() &amp;&amp; mTethering != null) {
             return mTethering.tether(iface);
         } else {
             return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
@@ -1610,7 +1619,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
     public int untether(String iface) {
         enforceTetherChangePermission();
 
-        if (isTetheringSupported()) {
+        if (isTetheringSupported() &amp;&amp; mTethering != null) {
             return mTethering.untether(iface);
         } else {
             return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
@@ -1621,7 +1630,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
     public int getLastTetherError(String iface) {
         enforceTetherAccessPermission();
 
-        if (isTetheringSupported()) {
+        if (isTetheringSupported() &amp;&amp; mTethering != null) {
             return mTethering.getLastTetherError(iface);
         } else {
             return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
@@ -1631,7 +1640,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
     // TODO - proper iface API for selection by property, inspection, etc
     public String[] getTetherableUsbRegexs() {
         enforceTetherAccessPermission();
-        if (isTetheringSupported()) {
+        if (isTetheringSupported() &amp;&amp; mTethering != null) {
             return mTethering.getTetherableUsbRegexs();
         } else {
             return new String[0];
@@ -1640,7 +1649,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
 
     public String[] getTetherableWifiRegexs() {
         enforceTetherAccessPermission();
-        if (isTetheringSupported()) {
+        if (isTetheringSupported() &amp;&amp; mTethering != null) {
             return mTethering.getTetherableWifiRegexs();
         } else {
             return new String[0];
@@ -1651,16 +1660,25 @@ public class ConnectivityService extends IConnectivityManager.Stub {
     // javadoc from interface
     public String[] getTetherableIfaces() {
         enforceTetherAccessPermission();
+        if (mTethering == null) {
+            return null;
+        }
         return mTethering.getTetherableIfaces();
     }
 
     public String[] getTetheredIfaces() {
         enforceTetherAccessPermission();
+        if (mTethering == null) {
+            return null;
+        }
         return mTethering.getTetheredIfaces();
     }
 
     public String[] getTetheringErroredIfaces() {
         enforceTetherAccessPermission();
+        if (mTethering == null) {
+            return null;
+        }
         return mTethering.getErroredIfaces();
     }
 
diff --git a/frameworks/base/services/java/com/android/server/NotificationManagerService.java b/frameworks/base/services/java/com/android/server/NotificationManagerService.java
index e8c1613..bbcef6c 100644
--- a/frameworks/base/services/java/com/android/server/NotificationManagerService.java
+++ b/frameworks/base/services/java/com/android/server/NotificationManagerService.java
@@ -1005,6 +1005,9 @@ public class NotificationManagerService extends INotificationManager.Stub
     }
 
     public void cancelAllNotifications(String pkg) {
+        if (pkg == null) {
+            return;
+        }
         checkIncomingCall(pkg);
 
         // Calling from user space, don't allow the canceling of actively
diff --git a/frameworks/base/services/java/com/android/server/SystemServer.java b/frameworks/base/services/java/com/android/server/SystemServer.java
index df69b76..8ee2f04 100644
--- a/frameworks/base/services/java/com/android/server/SystemServer.java
+++ b/frameworks/base/services/java/com/android/server/SystemServer.java
@@ -111,6 +111,9 @@ class ServerThread extends Thread {
         int factoryTest = "".equals(factoryTestStr) ? SystemServer.FACTORY_TEST_OFF
                 : Integer.parseInt(factoryTestStr);
 
+        // FACTORY_TEST_LOW_LEVEL By: Bian Jiang
+        //factoryTest = SystemServer.FACTORY_TEST_LOW_LEVEL;
+
         LightsService lights = null;
         PowerManagerService power = null;
         BatteryService battery = null;
@@ -139,9 +142,12 @@ class ServerThread extends Thread {
             Slog.i(TAG, "Activity Manager");
             context = ActivityManagerService.main(factoryTest);
 
+            /*
+             * Disable Telephone Service By: Bian Jiang 2012.2.24
             Slog.i(TAG, "Telephony Registry");
             ServiceManager.addService("telephony.registry", new TelephonyRegistry(context));
-
+            */
+            
             AttributeCache.init(context);
 
             Slog.i(TAG, "Package Manager");
@@ -152,6 +158,7 @@ class ServerThread extends Thread {
 
             mContentResolver = context.getContentResolver();
 
+            /*
             // The AccountManager must come before the ContentService
             try {
                 Slog.i(TAG, "Account Manager");
@@ -160,6 +167,7 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting Account Manager", e);
             }
+            */
 
             Slog.i(TAG, "Content Manager");
             ContentService.main(context,
@@ -182,6 +190,7 @@ class ServerThread extends Thread {
             // lights service, content providers and the battery service.
             power.init(context, lights, ActivityManagerService.getDefault(), battery);
 
+            /*
             Slog.i(TAG, "Alarm Manager");
             AlarmManagerService alarm = new AlarmManagerService(context);
             ServiceManager.addService(Context.ALARM_SERVICE, alarm);
@@ -189,6 +198,7 @@ class ServerThread extends Thread {
             Slog.i(TAG, "Init Watchdog");
             Watchdog.getInstance().init(context, battery, power, alarm,
                     ActivityManagerService.self());
+            */
 
             Slog.i(TAG, "Window Manager");
             wm = WindowManagerService.main(context, power,
@@ -198,6 +208,8 @@ class ServerThread extends Thread {
             ((ActivityManagerService)ServiceManager.getService("activity"))
                     .setWindowManager(wm);
 
+            /*
+             * Disable Bluetooth By: Bian Jiang
             // Skip Bluetooth if we have an emulator kernel
             // TODO: Use a more reliable check to see if this product should
             // support Bluetooth - see bug 988521
@@ -222,6 +234,7 @@ class ServerThread extends Thread {
                     bluetooth.enable();
                 }
             }
+            */
 
         } catch (RuntimeException e) {
             Slog.e("System", "Failure starting core service", e);
@@ -236,6 +249,7 @@ class ServerThread extends Thread {
         LocationManagerService location = null;
 
         if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
+            /*
             try {
                 Slog.i(TAG, "Device Policy");
                 devicePolicy = new DevicePolicyManagerService(context);
@@ -243,7 +257,9 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting DevicePolicyService", e);
             }
+            */
 
+            /*
             try {
                 Slog.i(TAG, "Status Bar");
                 statusBar = new StatusBarManagerService(context);
@@ -283,6 +299,7 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting NetworkManagement Service", e);
             }
+            */
 
             try {
                 Slog.i(TAG, "Connectivity Service");
@@ -292,6 +309,7 @@ class ServerThread extends Thread {
                 Slog.e(TAG, "Failure starting Connectivity Service", e);
             }
 
+            /*
             try {
                 Slog.i(TAG, "Throttle Service");
                 throttle = new ThrottleService(context);
@@ -308,6 +326,7 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
               Slog.e(TAG, "Failure starting Accessibility Manager", e);
             }
+            */
 
             try {
                 /*
@@ -320,6 +339,7 @@ class ServerThread extends Thread {
                 Slog.e(TAG, "Failure starting Mount Service", e);
             }
 
+            /*
             try {
                 Slog.i(TAG, "Notification Manager");
                 notification = new NotificationManagerService(context, statusBar, lights);
@@ -395,6 +415,7 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting DockObserver", e);
             }
+            */
 
             try {
                 Slog.i(TAG, "USB Observer");
@@ -404,6 +425,7 @@ class ServerThread extends Thread {
                 Slog.e(TAG, "Failure starting UsbObserver", e);
             }
 
+            /*
             try {
                 Slog.i(TAG, "UI Mode Manager Service");
                 // Listen for UI mode changes
@@ -419,6 +441,7 @@ class ServerThread extends Thread {
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting Backup Service", e);
             }
+            */
 
             try {
                 Slog.i(TAG, "AppWidget Service");
@@ -428,12 +451,14 @@ class ServerThread extends Thread {
                 Slog.e(TAG, "Failure starting AppWidget Service", e);
             }
 
+            /*
             try {
                 Slog.i(TAG, "Recognition Service");
                 recognition = new RecognitionManagerService(context);
             } catch (Throwable e) {
                 Slog.e(TAG, "Failure starting Recognition Service", e);
             }
+            */
 
             try {
                 Slog.i(TAG, "DiskStats Service");
@@ -453,7 +478,10 @@ class ServerThread extends Thread {
 
         // Before things start rolling, be sure we have decided whether
         // we are in safe mode.
-        final boolean safeMode = wm.detectSafeMode();
+        // Disable By: Bian Jiang 2012.2.29
+        final boolean safeMode = false;
+        //final boolean  safeMode = wm.detectSafeMode();
+
         if (safeMode) {
             try {
                 ActivityManagerNative.getDefault().enterSafeMode();
@@ -481,7 +509,9 @@ class ServerThread extends Thread {
         if (statusBar != null) {
             statusBar.systemReady();
         }
-        wm.systemReady();
+        if (wm != null) {
+            wm.systemReady();
+        }
         power.systemReady();
         try {
             pm.systemReady();
diff --git a/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java b/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
index 6db4559..40957a1 100644
--- a/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
+++ b/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
@@ -6560,8 +6560,11 @@ public final class ActivityManagerService extends ActivityManagerNative
                 (process.info.flags &amp; (ApplicationInfo.FLAG_SYSTEM |
                                        ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;
         final String dropboxTag = isSystemApp ? "system_app_strictmode" : "data_app_strictmode";
+        /*
         final DropBoxManager dbox = (DropBoxManager)
                 mContext.getSystemService(Context.DROPBOX_SERVICE);
+        */
+        final DropBoxManager dbox = null;
 
         // Exit early if the dropbox isn't configured to accept this report type.
         if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
@@ -6768,9 +6771,11 @@ public final class ActivityManagerService extends ActivityManagerNative
         // otherwise the watchdog may be prevented from resetting the system.
 
         final String dropboxTag = processClass(process) + "_" + eventType;
+        /*
         final DropBoxManager dbox = (DropBoxManager)
                 mContext.getSystemService(Context.DROPBOX_SERVICE);
-
+        */
+        final DropBoxManager dbox = null;
         // Exit early if the dropbox isn't configured to accept this report type.
         if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
 
diff --git a/frameworks/base/services/java/com/android/server/connectivity/Tethering.java b/frameworks/base/services/java/com/android/server/connectivity/Tethering.java
index a73a4ce..12fda39 100644
--- a/frameworks/base/services/java/com/android/server/connectivity/Tethering.java
+++ b/frameworks/base/services/java/com/android/server/connectivity/Tethering.java
@@ -127,6 +127,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
         IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
         INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
         try {
+            if (service == null) {
+                return;
+            }
             service.registerObserver(this);
         } catch (RemoteException e) {
             Log.e(TAG, "Error registering observer :" + e);
diff --git a/system/core/init/init.c b/system/core/init/init.c
index 75ffb5c..665a1bd 100644
--- a/system/core/init/init.c
+++ b/system/core/init/init.c
@@ -579,6 +579,10 @@ static int set_init_properties_action(int nargs, char **args)
 
     if (qemu[0])
         import_kernel_cmdline(1);
+    
+    // bootmode set to factory By: Bian Jiang 2012.2.24
+    //unsigned char *factory = "factory";
+    //memcpy(bootmode, factory, strlen(factory));
 
     if (!strcmp(bootmode,"factory"))
         property_set("ro.factorytest", "1");
@@ -646,6 +650,7 @@ static int bootchart_init_action(int nargs, char **args)
     } else {
         NOTICE("bootcharting ignored\n");
     }
+    return 0;
 }
 #endif
diff --git a/vendor/samsung/smdkv210/device-vendor.mk b/vendor/samsung/smdkv210/device-vendor.mk
index b8c26f4..d75cefa 100644
--- a/vendor/samsung/smdkv210/device-vendor.mk
+++ b/vendor/samsung/smdkv210/device-vendor.mk
@@ -15,7 +15,7 @@
 # This file is generated by device/samsung/smdkv210/setup-makefiles.sh
 
 # Live wallpaper packages
-PRODUCT_PACKAGES := \
+#PRODUCT_PACKAGES := \
     LiveWallpapers \
     LiveWallpapersPicker \
     MagicSmokeWallpapers \
@@ -23,7 +23,7 @@ PRODUCT_PACKAGES := \
     librs_jni
 
 # Publish that we support the live wallpaper feature.
-PRODUCT_COPY_FILES := \
+#PRODUCT_COPY_FILES := \
     packages/wallpapers/LivePicker/android.software.live_wallpaper.xml:/system/etc/permissions/android.software.live_wallpaper.xml

–EOF–

Categories: Android Tags: , , , , ,

Linux LCD驱动移植笔记

March 12th, 2012 No comments

由于项目的需要移植了一个Citizen的0.46英寸的LCD, 很久没有移植LCD驱动了,简单记录一下,避免时间长了忘记怎么改.
主要修改了一下几个文件:
.config | 5 +-
arch/arm/mach-s5pv210/mach-smdkc110.c | 150 ++++++++++-
drivers/video/samsung/Kconfig | 9 ++-
drivers/video/samsung/Makefile | 1 +
drivers/video/samsung/s3cfb.c | 10 ++
drivers/video/samsung/s3cfb_flocs600.c | 46 ++++++++++

1. .config
在make menuconfig里面选中我们移植好的flocs600选项

2. mach-smdkc110.c
主要定义LCD的分辨率,LCD初始化信息以及GPIO管脚的配置,lcd电源,背光等想设置信息。

3. Kconfig, Makefile
在make menuconfig中增加flocs600选项

4. s3cfb.c
WIN0 在uboot中使用了,但是为了保持uboot的logo显示,所以uboot不关闭win0但是 如果不关闭win0,会导致播放视频和camera preview花屏。

5. s3cfb_flocs600.c
lcd实际的驱动

大概就改这些东西,由于板子还没有回来,没有实际测试,估计在实际调整的时候需要再配置timing.

详细patch如下:

From 49e15e380f2b9c779ad7cad2bd7544ef506aa17f Mon Sep 17 00:00:00 2001
From: Bian Jiang
Date: Mon, 12 Mar 2012 18:26:32 +0800
Subject: [PATCH] LCD: Porting Citizen FL0904 0.46" SVGA flocs600
 
---
 .config                                |    5 +-
 arch/arm/mach-s5pv210/mach-smdkc110.c  |  150 +++++++++++++++++++++++++++++++-
 drivers/video/samsung/Kconfig          |    9 ++-
 drivers/video/samsung/Makefile         |    1 +
 drivers/video/samsung/s3cfb.c          |   10 ++
 drivers/video/samsung/s3cfb_flocs600.c |   46 ++++++++++
 6 files changed, 217 insertions(+), 4 deletions(-)
 create mode 100644 drivers/video/samsung/s3cfb_flocs600.c
 
diff --git a/.config b/.config
index 29d2580..d75abfc 100644
--- a/.config
+++ b/.config
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.35.7
-# Thu Mar  8 16:22:49 2012
+# Mon Mar 12 18:14:42 2012
 #
 CONFIG_ARM=y
 CONFIG_HAVE_PWM=y
@@ -1608,7 +1608,8 @@ CONFIG_FB_S3C_LCD_INIT=y
 CONFIG_FB_S3C_DEFAULT_WINDOW=2
 CONFIG_FB_S3C_NR_BUFFERS=4
 # CONFIG_FB_S3C_VIRTUAL is not set
-CONFIG_FB_S3C_LTE480WV=y
+CONFIG_FB_S3C_FLOCS600=y
+# CONFIG_FB_S3C_LTE480WV is not set
 # CONFIG_FB_S3C_HT101HD1 is not set
 # CONFIG_FB_S3C_TL2796 is not set
 # CONFIG_FB_S3C_LVDS is not set
diff --git a/arch/arm/mach-s5pv210/mach-smdkc110.c b/arch/arm/mach-s5pv210/mach-smdkc110.c
index deb377a..40273c9 100644
--- a/arch/arm/mach-s5pv210/mach-smdkc110.c
+++ b/arch/arm/mach-s5pv210/mach-smdkc110.c
@@ -164,7 +164,9 @@ static struct s3c2410_uartcfg smdkc110_uartcfgs[] __initdata = {
 };
 
 #define S5PV210_LCD_WIDTH 800
-#define S5PV210_LCD_HEIGHT 480
+//#define S5PV210_LCD_HEIGHT 480
+/* Change For Citizen SVGA-Flocs FL0904 By: Bian Jiang 2012.3.12 */
+#define S5PV210_LCD_HEIGHT 600
 
 //#define  S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC0 (6144 * SZ_1K)
 #define  S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC0 (24576 * SZ_1K)
@@ -837,6 +839,147 @@ static struct s3c_platform_fb lte480wv_fb_data __initdata = {
 };
 #endif
 
+#ifdef CONFIG_FB_S3C_FLOCS600
+/* Citizen FL0904 0.46" flocs600 Add By: Bian Jiang 2012.3.12 */
+static struct s3cfb_lcd flocs600 = {
+	.width = S5PV210_LCD_WIDTH,
+	.height = S5PV210_LCD_HEIGHT,
+	.bpp = 32,
+	.freq = 60,
+
+	.timing = {
+		.h_fp = 8,
+		.h_bp = 13,
+		.h_sw = 3,
+		.v_fp = 5,
+		.v_fpe = 1,
+		.v_bp = 7,
+		.v_bpe = 1,
+		.v_sw = 1,
+	},
+	.polarity = {
+		.rise_vclk = 0,
+		.inv_hsync = 1,
+		.inv_vsync = 1,
+		.inv_vden = 0,
+	},
+};
+
+static void flocs600_cfg_gpio(struct platform_device *pdev)
+{
+	int i;
+
+	for (i = 0; i &lt; 8; i++) {
+		s3c_gpio_cfgpin(S5PV210_GPF0(i), S3C_GPIO_SFN(2));
+		s3c_gpio_setpull(S5PV210_GPF0(i), S3C_GPIO_PULL_NONE);
+	}
+
+	for (i = 0; i &lt; 8; i++) {
+		s3c_gpio_cfgpin(S5PV210_GPF1(i), S3C_GPIO_SFN(2));
+		s3c_gpio_setpull(S5PV210_GPF1(i), S3C_GPIO_PULL_NONE);
+	}
+
+	for (i = 0; i &lt; 8; i++) {
+		s3c_gpio_cfgpin(S5PV210_GPF2(i), S3C_GPIO_SFN(2));
+		s3c_gpio_setpull(S5PV210_GPF2(i), S3C_GPIO_PULL_NONE);
+	}
+
+	for (i = 0; i &lt; 4; i++) {
+		s3c_gpio_cfgpin(S5PV210_GPF3(i), S3C_GPIO_SFN(2));
+		s3c_gpio_setpull(S5PV210_GPF3(i), S3C_GPIO_PULL_NONE);
+	}
+
+	/* mDNIe SEL: why we shall write 0x2 ? */
+	writel(0x2, S5P_MDNIE_SEL);
+
+	/* drive strength to max */
+	writel(0xffffffff, S5PV210_GPF0_BASE + 0xc);
+	writel(0xffffffff, S5PV210_GPF1_BASE + 0xc);
+	writel(0xffffffff, S5PV210_GPF2_BASE + 0xc);
+	writel(0x000000ff, S5PV210_GPF3_BASE + 0xc);
+}
+
+#define S5PV210_GPD_0_0_TOUT_0  (0x2)
+#define S5PV210_GPD_0_1_TOUT_1  (0x2 &lt;&lt; 4)
+#define S5PV210_GPD_0_2_TOUT_2  (0x2 &lt;&lt; 8)
+#define S5PV210_GPD_0_3_TOUT_3  (0x2 &lt;&lt; 12) +static int flocs600_backlight_on(struct platform_device *pdev) +{ +	int err; + +	err = gpio_request(S5PV210_GPD0(3), "GPD0"); + +	if (err) { +		printk(KERN_ERR "failed to request GPD0 for " +			"lcd backlight control\n"); +		return err; +	} + +	gpio_direction_output(S5PV210_GPD0(3), 1); + +	s3c_gpio_cfgpin(S5PV210_GPD0(3), S5PV210_GPD_0_3_TOUT_3); + +	gpio_free(S5PV210_GPD0(3)); +	return 0; +} + +static int flocs600_backlight_off(struct platform_device *pdev, int onoff) +{ +	int err; + +	err = gpio_request(S5PV210_GPD0(3), "GPD0"); + +	if (err) { +		printk(KERN_ERR "failed to request GPD0 for " +				"lcd backlight control\n"); +		return err; +	} + +	gpio_direction_output(S5PV210_GPD0(3), 0); +	gpio_free(S5PV210_GPD0(3)); +	return 0; +} + +static int flocs600_reset_lcd(struct platform_device *pdev) +{ +	int err; + +	err = gpio_request(S5PV210_GPH0(6), "GPH0"); +	if (err) { +		printk(KERN_ERR "failed to request GPH0 for " +				"lcd reset control\n"); +		return err; +	} + +	gpio_direction_output(S5PV210_GPH0(6), 1); +	mdelay(100); + +	gpio_set_value(S5PV210_GPH0(6), 0); +	mdelay(10); + +	gpio_set_value(S5PV210_GPH0(6), 1); +	mdelay(10); + +	gpio_free(S5PV210_GPH0(6)); + +	return 0; +} + +static struct s3c_platform_fb flocs600_fb_data __initdata = { +	.hw_ver	= 0x62, +	.nr_wins = 5, +	.default_win = CONFIG_FB_S3C_DEFAULT_WINDOW, +	.swap = FB_SWAP_WORD | FB_SWAP_HWORD, + +	.lcd = &amp;flocs600, +	.cfg_gpio	= flocs600_cfg_gpio, +	.backlight_on	= flocs600_backlight_on, +	.backlight_onoff    = flocs600_backlight_off, +	.reset_lcd	= flocs600_reset_lcd, +}; +#endif + +  #ifdef CONFIG_S3C64XX_DEV_SPI    #define SMDK_MMCSPI_CS 0 @@ -1935,6 +2078,11 @@ static void __init smdkc110_machine_init(void)  	s3cfb_set_platdata(&amp;lte480wv_fb_data);  #endif   +/* Citizen Flocs FL0904 0.46" SVGA Add By: Bian Jiang 2012.4.12 */ +#ifdef CONFIG_FB_S3C_FLOCS600 +	s3cfb_set_platdata(&amp;flocs600_fb_data); +#endif +  	/* spi */  //#if 0	  #ifdef CONFIG_S3C64XX_DEV_SPI diff --git a/drivers/video/samsung/Kconfig b/drivers/video/samsung/Kconfig index 7738be14..7da6c62 100644 --- a/drivers/video/samsung/Kconfig +++ b/drivers/video/samsung/Kconfig @@ -71,13 +71,20 @@ config FB_S3C_Y_VRES  choice  depends on FB_S3C  prompt "Select LCD Type" -default FB_S3C_LTE480WV +default FB_S3C_FLOCS600 +config FB_S3C_FLOCS600 +	bool "FLOCS600" +	depends on (MACH_SMDKV210 || MACH_SMDKC110) +	---help--- +	  This enables support for Citizen FL0904 FLOCS600 0.46" SVGA LCD panel +  config FB_S3C_LTE480WV  	bool "LTE480WV"  	depends on (MACH_SMDKV210 || MACH_SMDKC110)  	---help---  	  This enables support for Samsung LTE480WV 4.8\" WVGA LCD panel   +  config FB_S3C_HT101HD1  	bool "HT101HD1"  	depends on MACH_SMDKV210 diff --git a/drivers/video/samsung/Makefile b/drivers/video/samsung/Makefile index e317c86..79390c8 100644 --- a/drivers/video/samsung/Makefile +++ b/drivers/video/samsung/Makefile @@ -7,6 +7,7 @@ obj-y				+= s3cfb.o  obj-$(CONFIG_ARCH_S5PV210)	+= s3cfb_fimd6x.o    obj-$(CONFIG_FB_S3C_LTE480WV)	+= s3cfb_lte480wv.o +obj-$(CONFIG_FB_S3C_FLOCS600)	+= s3cfb_flocs600.o  obj-$(CONFIG_FB_S3C_LVDS)       += s3cfb_lvds.o  obj-$(CONFIG_FB_S3C_HT101HD1)   += s3cfb_ht101hd1.o  obj-$(CONFIG_FB_S3C_TL2796)     += s3cfb_tl2796.o diff --git a/drivers/video/samsung/s3cfb.c b/drivers/video/samsung/s3cfb.c index a7a71e0..add9a47 100644 --- a/drivers/video/samsung/s3cfb.c +++ b/drivers/video/samsung/s3cfb.c @@ -983,6 +983,16 @@ static int __devinit s3cfb_probe(struct platform_device *pdev)  	}    	s3cfb_set_clock(fbdev); + +#if defined(CONFIG_DE_MOBILE_PHONE_BOARD) || defined(CONFIG_DE_BASE_BOARD) +    /* Add By: Bian Jiang 2012.3.12 +     *  WIN0 在uboot中使用了,但是为了保持uboot的logo显示,所以uboot不关闭win0 +     *  但是 如果不关闭win0,会导致播放视频和camera preview花屏。 +     */ +    s3cfb_set_window(fbdev, 0, 0); +#endif +  	s3cfb_set_window(fbdev, pdata-&gt;default_win, 1);
 
 	s3cfb_display_on(fbdev);
diff --git a/drivers/video/samsung/s3cfb_flocs600.c b/drivers/video/samsung/s3cfb_flocs600.c
new file mode 100644
index 0000000..3469a08
--- /dev/null
+++ b/drivers/video/samsung/s3cfb_flocs600.c
@@ -0,0 +1,46 @@
+/* linux/drivers/video/samsung/s3cfb_flocs600.c
+ *
+ * Citizen Flocs FL0904 0.46" SVGA Display Panel Support
+ *
+ * Jinsung Yang, Copyright (c) 2009 Samsung Electronics
+ * 	http://www.samsungsemi.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include "s3cfb.h"
+
+static struct s3cfb_lcd flocs600 = {
+	.width = 800,
+	.height = 600,
+	.bpp = 32,
+	.freq = 60,
+
+	.timing = {
+		.h_fp = 8,
+		.h_bp = 13,
+		.h_sw = 3,
+		.v_fp = 5,
+		.v_fpe = 1,
+		.v_bp = 7,
+		.v_bpe = 1,
+		.v_sw = 1,
+	},
+
+	.polarity = {
+		.rise_vclk = 0,
+		.inv_hsync = 1,
+		.inv_vsync = 1,
+		.inv_vden = 0,
+	},
+};
+
+/* name should be fixed as 's3cfb_set_lcd_info' */
+void s3cfb_set_lcd_info(struct s3cfb_global *ctrl)
+{
+	flocs600.init_ldi = NULL;
+	ctrl-&gt;lcd = &amp;flocs600;
+}
+
--
1.7.4.1

下载地址:
0001-LCD-Porting-Citizen-FL0904-0.46-SVGA-flocs600

–EOF–

用Go写了个取得Youtube下载地址和字幕地址

March 12th, 2012 No comments

用Go正则写了个取得Youtube下载地址和字幕地址具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main
 
import (
	"fmt"
	"io/ioutil"
	"net/http"
	"regexp"
	"strings"
)
 
func main() {
	c := new(http.Client)
	//resp, err := c.Get("http://www.youtube.com/watch?v=OOUD2j-l7BI&feature=g-u-u&context=G2c38d77FUAAAAAAACAA")
	resp, err := c.Get("http://127.0.0.1/youtube.htm")
 
	if err != nil {
		fmt.Println("Error: ", err)
		return
	}
	defer resp.Body.Close()
	buf, err := ioutil.ReadAll(resp.Body)
 
	beginRegStr := `(?Usmi)yt.playerConfig.=.{.*"args":.{"ttsurl":."(.*)",.*"url_encoded_fmt_stream_map":."(.*)",.*}.*};`
 
	beginRegex, _ := regexp.Compile(beginRegStr)
 
	pos := beginRegex.FindAllSubmatch(buf, 1024)
	if pos == nil {
		fmt.Println("Nothing matched!")
		return
	}
 
	subtitle := make([]byte, 1024)
	urlsArray := make([]byte, 1024*20)
 
	for i := 0; i < len(pos); i++ {
		subtitle = pos[i][1]
		urlsArray = pos[i][2]
	}
	fmt.Println("subtitle: ", string(subtitle))
 
	urlStr := strings.Split(string(urlsArray), ",")
	for i := 0; i < len(urlStr); i++ {
		fmt.Println(i, ", ", urlStr[i])
	}
}

格式化后的代码: https://gist.github.com/2016902

Categories: golang Tags: , , , ,