2009年6月6日 星期六

Android Cupcake on EeePC 900 with Huawei E169

來野人獻曝一下

1. 下載 Android cupcake for eeepc 701
請參考這個網站
http://virtuallyshocking.com/2008/12/20/building-android-for-the-asus-eeepc-701/

2. git 回來的 cupcake/vendor/asus/eeepc_701/kernel 是 2.6.25
cupcake/kernel 為 2.6.27 不過這個沒有關係稍作修改就好了
下載http://wiki.androidx86.org/index.php?title=Asus_Eee_PC_901 裡面的 kernel config

3. 把該 kernel config 複製為 cupcake/kernel/.config
make menuconfig
EXT2 ( installer needs it to mount ramdisk )
PPP ( choose all options )
USB serial
Includes USB GSM and CDMA option
Framebuffer
VESA VGA Driver (雖然 有 I915的Framebuffer driver 但是我試過沒辦法作用)

4. 修改 cupcake/kernel/drivers/rtc/alarm.c
Delete #include

Add below code to alarm.c
#ifdef __i386__
static void save_time_delta(struct timespec *delta, struct timespec *rtc)
{
set_normalized_timespec(delta,
xtime.tv_sec - rtc->tv_sec,
xtime.tv_nsec - rtc->tv_nsec);
}
#endif
5. Enable PPPD for x86
pppd 的 Android.mk 預設只有當 TARGET=arm的時候才會編譯
刪除 pppd\Android.mk 第一行 if 與 最後一行 fi 即可

6. Add chat to source tree
chat 請去 ppp.samba.org 下載 2.4.3 版的 pppd-2.4.3.tar.gz 裡面有 chat.c
複製到 cupcake/external/ppp/chat 內 並且新增一個 Android.mk 在該目錄
------------------------------------Android.mk ------------------------------------------------------
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
chat.c

LOCAL_SHARED_LIBRARIES := \
libcutils libc

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include

LOCAL_CFLAGS := -DANDROID_CHANGES -DTERMIOS -DSIGTYPE=void -UNO_SLEEP -DFNDELAY=O_NDELAY

LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:= chat

include $(BUILD_EXECUTABLE)
----------------------------------------------------------------------------------------------------------

7. 新增兩個 script 到 cupcake/system/core/rootdir/etc/ppp 下面

-----------------------PPP Script : ppp-startup ---------------------------------
#!/system/bin/sh
setprop net.dns1 168.95.1.1
/system/xbin/pppd –detach modem crtscts debug \
/dev/ttyUSB0 460800 noipdefault \
defaultroute usepeerdns \
connect “/etc/ppp/pppondialer”
-------------------------------------------------------------------------
-----------------------chat Script : pppondialer----------------------------------------------------
#!/system/bin/sh
chat –v –s \
TIMEOUT 3 \
ABORT BUSY \
ABORT ERROR \
“” ‘AT’ \
OK ‘ATH0’ \
OK ‘ATZ’ \
TIMEOUT 30 \
OK ‘ATQ0 V1 E1 S0=0 &C1 &C2 +FCLASS=0’ \
OK ‘AT+CGDCONT=1,”IP”,”internet”’ \ internet 為中華電信 APN name
OK ‘AT+CSQ’ \
OK ‘ATD*99#’ \
TIMEOUT 50 \
CONNECT ‘’

-------------------------------------------------------------------------------------

8. 修改 cupcake/system/core/rootdir/Androidk.mk 內 copy_from
copy_from = ....\
etc/ppp/ppp-startup
etc/ppp/pppondialer
don't forget add the execution permission

9.Revise BoardConfig.mk
vendor/asus/eeepc_701/BoardConfig.mk
BOOT_KERNEL_CMDLINE
For using VESA VGA Framebuffer, append option “vga=788 “ to end of line

10 將external/e2fsprogs/Android.mk中第二行註解#字號拿掉
include $(call all-subdir-makefiles)

11. 修改bootable/diskinstaller/init.rc如下:
service installer /system/bin/installer -p /dev/block/sdc2

12. 修改framework/base/preloaded-classes:
#com.android.internal.policy.impl.PhoneLayoutInflater
#com.android.internal.policy.impl.PhoneWindow
#com.android.internal.policy.impl.PhoneWindow$1
#com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback
#com.android.internal.policy.impl.PhoneWindow$DecorView
#com.android.internal.policy.impl.PhoneWindow$PanelFeatureState
#com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState
#com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1

13. 修改vendor/asus/eee_701/init.rc:
# Define the oom_adj values for the classes of processes that can be killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
setprop ro.HOME_APP_ADJ 4
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15
# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
setprop ro.SECONDARY_SERVER_MEM 4096
setprop ro.HOME_APP_MEM 4096
setprop ro.HIDDEN_APP_MEM 8192
setprop ro.CONTENT_PROVIDER_MEM 8704
setprop ro.EMPTY_APP_MEM 16384


14. TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make -j8 installer_img 編譯 Android cupcake
然後用 dd if=out/target/product/installer.img of=/dev/sdx 安裝 android 到 usb 隨身碟上面, 接下來插入 eeepc 開機吧~ have for fun

15. 安裝完成後 進入Android 按 Alt+CTRL + F1 進入 Console 呼叫 進入 /system/etc/ppp
插入 E169 如果你有看到 /dev/ttyUSB0 有出現那就 並且執行 ppp-startup 然後試看看你的瀏覽器吧!