在把kernel燒進STK的NAND flash之前,必須再對kernel做修改並重新編譯。
在$(andkernel)/common下開啟kernel設定工具:
$ make ARCH=arm menuconfig
1. 因為file system放在SD卡上的ext3分割區,kernel必須支援Ext3 file system
File systems --->
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
2. 某些Android執行檔會被編譯成使用ARM Thumb
System Type --->
[*] Support Thumb user binaries
3. 因應AT91CAP9-STK記憶體配置
General setup --->
[*] Enable the Anonymous Shared Memory Subsystem
設定完成離開時記得儲存設定到.config。這樣一來,kernel已經具備
開啟Android的條件。
接著我們把自製的kernel燒到STK上:
在Windows下,修改at91cap9stk-x11-nd.tcl
(與上次燒Angstrom時使用的at91cap9-stk-x11-nd.bat在同一目錄下)
kernelFileName "at91cap9stk-linux.bin"
->kernelFileName "uImage"
再將uImage複製到該目錄下,以相同方法燒錄。
(註:因為我們不需要燒錄file system,可將以下兩行從.tcl檔刪除
puts "-I- === Load the linux file system ==="
send_file {NandFlash} "$nd_mapping(diskFileName)" $nd_mapping(diskOff) 0
)
燒錄成功之後重新開機,在U-boot出現以下訊息時按下ENTER
Hit any key to stop autoboot: 0
就可進入U-Boot> 環境。
因為U-Boot並不使用kernel設定中的Boot Option,而是看U-Boot自身的
bootcmd, bootargs等參數,在這裡我們設定bootargs。
U-Boot> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rw init=/init rootwait
(/dev/mmcblk0p1為第一個SD card的第一個分割區
rootwait是為了確保SD card驅動在mount root之前已經準備好)
U-Boot> saveenv
U-Boot> run bootcmd
run bootcmd之後,緊接著開始載入kernel、driver,
從SD card取得root file system,執行/init等步驟。
最後就可以看到螢幕上出現"ANDROID"字樣,接著進入桌面,如下圖:
---以下為Android 1.5 (Cupcake)版本特有現象,如果你下載的是Android 1.6 (Donut),請直接跳過---
...然後就Power off,掛掉了。
這個問題是Android framework的設計不當。在Android假設的平台上都有個電池,
經由charger and power management IC可以取得電量資訊。
但是在porting的環境上一般不會放上電池,於是Android在讀取不到電量資訊的情況下,
假設電量為0。系統判定電量過低,直接關機。
修正方法是直接修改Android中有關電源管理的source code,或是重新下載1.6版。
---以上問題在Android 1.6 (Donut)已修正,電量過低不會強迫關機---
以下是Android 1.6的低電量顯示訊息
到這裡,我們整理出三個明顯的問題:
1. 雖然是觸控螢幕,不過那個OK怎麼按都沒反應 (Touchscreen problem)
2. 顏色異常,字體明顯破碎 (LCD driver problem)
3. 要使用完整Android平台功能,至少要有"Home"、"Menu"、"Back"等硬體鍵盤,STK上沒有
解決這些問題就要從Android source code下手了。最好再準備一個USB界面的Keyboard。
(待續...)
留言列表