Google 將 Android 4.0 釋出後,製造了一波移植運動。Linaor 或是 xda-developer 上,都已經發佈 Ice Cream Sandwich 的移植成果。一些大家手邊常見的開發板,像是 PandaBoard 等,也都能運行最新的 Android 4.0 系統了。
在 Android 4.0 AOSP 上線後,手邊也開始了一個移植專案;經過一個多禮拜的努力,就在大有斬獲時,開發板就被 Porting 到壞掉了。不過,Ice Cream Sandwich 移植是一個令人熱血沸驣的工作,怎麼能這樣就休息呢。於是把在上課使用的 devkit8000 開發板拿出來「試試看」,這是我手邊現有的唯一開發板。
雖然 devkit8000 的硬體配置不算頂級(Cortex A8 600MHz 處理器、256M 記憶體),但因為 Linaro 發佈的 Release 11.11 與 11.12 都把 ICS 移植到 PandaBoard 與 BeagleBoard 了,所以我想 devkit8000 「應該」也不成問題。
上週在進行「Android Porting」的教育訓練時,也跟同學提到,「要把 Android 移植到可以開機」,並不是很難的工作,所以,這個任務的目標,就定為「只到可以開機就好」。於是,利用了週末以及今天下午的時間,進行了這項任務。
為了實驗:從 AOSP(Android Open Source Project)到能開機,並不是難事,所以我就從 AOSP 上取得原生的 Android 程式碼,開始了移植作業。Android 4.0 Porting 很有趣,而且也有一點挑戰性。
由於 Android 4.0 使用到 Wakelock 的 Early-suspend 功能,所以必須重新編譯 kernel,把 Power sysfs 打開。原本打算取用 Linaor 的 kernel,不過後來還是決定使用 rowboat 的版本,再加上 devkit8000 的 4.3 吋 LCD Panel 需要打一些補丁,最後是下載了 0xdroid 的 kernel tree,除了有包含 rowboat 的分支外,也維護了 devkit8000 的相關 patch。
工程師初老症第一條:能找到別人維護好、現成可用的 source tree,就不會有自已維護、打補丁的念頭。
不過最後還是對 kernel 做了一點小修改,包含 Touch Screen 的邊緣沒反應等小問題。這個版本目前維護在 moko365 的 github 上。
移植 Android 時,也修改了一些小細節。不過,大致上「編譯後放到板子上」就可以開機了。由於 dexopt 的 verify-and-optimize 所製造出來的 cache 資料量比較大,以及為了方便測試,所以我就把 kernel、ramdisk 與整個 system 都放到 SD Card 上開機。
最後做出一個只能開機的 Android 4.0 + Devkit8000。Graphics 的部份,使用的是 libEGL_android.so,也就是 Software OpenGL,並沒有硬體加速的功能。最後就是影片中看到的:Launcher2 起來後就掛了。所以,要到真正能用,還要再加點工。
在 Po 壞的板子維修完成前,Devkit8000 大概還要再陪我過幾天乾癮。
12.07 更新:Launcher 順利啟動
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw