Archive

Posts Tagged ‘Patch’

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 >= 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 &&
                         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 >= 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 @@
 -->
 
+<!--
     <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–

md5 sha Deprecated since version 2.5 Use the hashlib module instead.

July 30th, 2009 3 comments

今天在安装完xmpppy-0.5.0rc1 ,在运行的时候报md5和sha被hashlib替换,查了资料才发现,在Python2.6中使用md5, sha函数不推荐直接使用而是用hashlib替代。

md5

-import md5
-def HH(some): return md5.new(some)
+import hashlib
+def HH(some): return hashlib.md5(some)

sha

-import sha
-def HH(some): return sha.new(some)
+import hashlib
+def HH(some): return hashlib.sha1(some)

都包括 md5(), sha1(), sha224(), sha256(), sha384(), and sha512()

这里给出auth.py md5和sha的patch

diff –git a/xmpp/auth.py b/xmpp/auth.py
index 6e51d72..508718a 100755
— a/xmpp/auth.py
+++ b/xmpp/auth.py
@@ -21,11 +21,11 @@ Can be used both for client and transport authentication.

from protocol import *
from client import PlugIn
-import sha,base64,random,dispatcher,re
+import base64,random,dispatcher,re

-import md5
-def HH(some): return md5.new(some).hexdigest()
-def H(some): return md5.new(some).digest()
+import hashlib
+def HH(some): return hashlib.md5(some).hexdigest()
+def H(some): return hashlib.md5(some).digest()
def C(some): return ‘:’.join(some)

class NonSASL(PlugIn):
@@ -54,15 +54,15 @@ class NonSASL(PlugIn):

if query.getTag(‘digest’):
self.DEBUG(“Performing digest authentication”,’ok’)
-            query.setTagData(‘digest’,sha.new(owner.Dispatcher.Stream._document_attrs['id']+self.password).hexdigest())
+            query.setTagData(‘digest’,hashlib.sha1(owner.Dispatcher.Stream._document_attrs['id']+self.password).hexdigest())
if query.getTag(‘password’): query.delChild(‘password’)
method=’digest’
elif query.getTag(‘token’):
token=query.getTagData(‘token’)
seq=query.getTagData(‘sequence’)
self.DEBUG(“Performing zero-k authentication”,’ok’)
-            hash = sha.new(sha.new(self.password).hexdigest()+token).hexdigest()
-            for foo in xrange(int(seq)): hash = sha.new(hash).hexdigest()
+            hash = hashlib.sha1(hashlib.sha1(self.password).hexdigest()+token).hexdigest()
+            for foo in xrange(int(seq)): hash = hashlib.sha1(hash).hexdigest()
query.setTagData(‘hash’,hash)
method=’0k’
else:
@@ -81,7 +81,7 @@ class NonSASL(PlugIn):
def authComponent(self,owner):
“”" Authenticate component. Send handshake stanza and wait for result. Returns “ok” on success. “”"
self.handshake=0
-        owner.send(Node(NS_COMPONENT_ACCEPT+’ handshake’,payload=[sha.new(owner.Dispatcher.Stream._document_attrs['id']+self.password).hexdigest()]))
+        owner.send(Node(NS_COMPONENT_ACCEPT+’ handshake’,payload=[hashlib.sha1(owner.Dispatcher.Stream._document_attrs['id']+self.password).hexdigest()]))
owner.RegisterHandler(‘handshake’,self.handshakeHandler,xmlns=NS_COMPONENT_ACCEPT)
while not self.handshake:
self.DEBUG(“waiting on handshake”,’notify’)

参考:
1.  hashlib http://docs.python.org/library/hashlib.html#module-hashlib

linux-2.6.30 with gcc-3.4.6 compile error

July 20th, 2009 No comments

想通过codeviz看linux kernel的调用关系, 但是codeviz用的是gcc-3.4.6,

但在用gcc-3.4.6编译linux-2.6.30的时候报错:

 drivers/net/igb/igb_main.c: In function `igb_up':
 drivers/net/igb/igb_main.c:130: sorry, unimplemented: inlining failed
 in call to 'igb_set_rah_pool': function body not available
 drivers/net/igb/igb_main.c:938: sorry, unimplemented: called from here
 drivers/net/igb/igb_main.c:133: sorry, unimplemented: inlining failed
 in call to 'igb_set_vmolr': function body not available
 drivers/net/igb/igb_main.c:939: sorry, unimplemented: called from here
 make[3]: *** [drivers/net/igb/igb_main.o] Error 1
 make[2]: *** [drivers/net/igb] Error 2
 make[1]: *** [drivers/net] Error 2
 make: *** [drivers] Error 2
 
 This is CentOS 4.x system.  While using same configuration to compile
 in CentOS 5.x systems with gcc-4.1.2 do not encounter such error and
 my guess is gcc version issue?  Any idea?

Linux-2.6.30 Linux-2.6.30.1使用gcc-3.4.6编译错误补丁:

diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index be48029..adb09d3 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -127,14 +127,48 @@  static void igb_restore_vlan(struct igb_adapter *);
 static void igb_ping_all_vfs(struct igb_adapter *);
 static void igb_msg_task(struct igb_adapter *);
 static int igb_rcv_msg_from_vf(struct igb_adapter *, u32);
-static inline void igb_set_rah_pool(struct e1000_hw *, int , int);
 static void igb_set_mc_list_pools(struct igb_adapter *, int, u16);
 static void igb_vmm_control(struct igb_adapter *);
-static inline void igb_set_vmolr(struct e1000_hw *, int);
-static inline int igb_set_vf_rlpml(struct igb_adapter *, int, int);
 static int igb_set_vf_mac(struct igb_adapter *adapter, int, unsigned char *);
 static void igb_restore_vf_multicasts(struct igb_adapter *adapter);

+static inline void igb_set_vmolr(struct e1000_hw *hw, int vfn)
+{
+	u32 reg_data;
+
+	reg_data = rd32(E1000_VMOLR(vfn));
+	reg_data |= E1000_VMOLR_BAM |	 /* Accept broadcast */
+	            E1000_VMOLR_ROPE |   /* Accept packets matched in UTA */
+	            E1000_VMOLR_ROMPE |  /* Accept packets matched in MTA */
+	            E1000_VMOLR_AUPE |   /* Accept untagged packets */
+	            E1000_VMOLR_STRVLAN; /* Strip vlan tags */
+	wr32(E1000_VMOLR(vfn), reg_data);
+}
+
+static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size,
+                                 int vfn)
+{
+	struct e1000_hw *hw = &adapter->hw;
+	u32 vmolr;
+
+	vmolr = rd32(E1000_VMOLR(vfn));
+	vmolr &= ~E1000_VMOLR_RLPML_MASK;
+	vmolr |= size | E1000_VMOLR_LPE;
+	wr32(E1000_VMOLR(vfn), vmolr);
+
+	return 0;
+}
+
+static inline void igb_set_rah_pool(struct e1000_hw *hw, int pool, int entry)
+{
+	u32 reg_data;
+
+	reg_data = rd32(E1000_RAH(entry));
+	reg_data &= ~E1000_RAH_POOL_MASK;
+	reg_data |= E1000_RAH_POOL_1 << pool;;
+	wr32(E1000_RAH(entry), reg_data);
+}
+
 #ifdef CONFIG_PM
 static int igb_suspend(struct pci_dev *, pm_message_t);
 static int igb_resume(struct pci_dev *);
@@ -5418,43 +5452,6 @@  static void igb_io_resume(struct pci_dev *pdev)
 	igb_get_hw_control(adapter);
 }

-static inline void igb_set_vmolr(struct e1000_hw *hw, int vfn)
-{
-	u32 reg_data;
-
-	reg_data = rd32(E1000_VMOLR(vfn));
-	reg_data |= E1000_VMOLR_BAM |	 /* Accept broadcast */
-	            E1000_VMOLR_ROPE |   /* Accept packets matched in UTA */
-	            E1000_VMOLR_ROMPE |  /* Accept packets matched in MTA */
-	            E1000_VMOLR_AUPE |   /* Accept untagged packets */
-	            E1000_VMOLR_STRVLAN; /* Strip vlan tags */
-	wr32(E1000_VMOLR(vfn), reg_data);
-}
-
-static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size,
-                                 int vfn)
-{
-	struct e1000_hw *hw = &adapter->hw;
-	u32 vmolr;
-
-	vmolr = rd32(E1000_VMOLR(vfn));
-	vmolr &= ~E1000_VMOLR_RLPML_MASK;
-	vmolr |= size | E1000_VMOLR_LPE;
-	wr32(E1000_VMOLR(vfn), vmolr);
-
-	return 0;
-}
-
-static inline void igb_set_rah_pool(struct e1000_hw *hw, int pool, int entry)
-{
-	u32 reg_data;
-
-	reg_data = rd32(E1000_RAH(entry));
-	reg_data &= ~E1000_RAH_POOL_MASK;
-	reg_data |= E1000_RAH_POOL_1 << pool;;
-	wr32(E1000_RAH(entry), reg_data);
-}
-
 static void igb_set_mc_list_pools(struct igb_adapter *adapter,
 				  int entry_count, u16 total_rar_filters)
 {

参考:
1. linux-2.6.30.1 with gcc-3.4.6 compile error http://patchwork.kernel.org/patch/35402/
2. codeviz http://www.csn.ul.ie/~mel/projects/codeviz/
Categories: Kernel Tags: , , ,