移植 Android 4.0 到 Devkit8000 開發板 (OMAP3),只能開機、沒有硬體加速

jollen 發表於 December 5, 2011 4:18 PM

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 順利啟動

讀者留言 (5)

  • vincent 於 December 20, 2011 19:15:

    之前上Jollen的課程時,
    Jollen有提到vim會比sourceInsight更準確trce code,
    請問是使用ctag+taglist嗎?

    如果要讓滑鼠點擊function-name就可以跳到implementation的地方要如何設定?

    多謝Jollen & Moko365

  • jollen 於 December 23, 2011 23:16:

    @vincent

    vim + ctags 我都用 Ctrl + ] 跳到符號位置
    搭配 cscope 使用更方便、可以選擇正確的 file

  • james 於 March 27, 2012 12:08:

    Hi: 您好,我最近也在使用Beagleboard 來測試Android,

    目前我的狀況是Android 2.3 + Kernel 2.6.37version
    加上我自己寫的Touchscreen driver(自家公司的產品),...
    已經順利可以demo,

    但當我跳到ICE Android4 時候(原來2.6.37version的uImage)+ Androin 4,...我發現我哦觸控面板竟驅動不了(但我minicom rs232測試還是po出訊號我觸控的訊號).
    我猜可能是Android4 ICE OS造成的問題,不知您有沒有啥方法可以教學一下讓我在ICE環境也可以讓touchscreen可以驅動.

    (我下載的Prebuilt版本位置在 : http://code.google.com/p/rowboat/downloads/list 內的beagleboard_xm_sgx版本)

  • 070 於 November 3, 2012 02:03:

    您好,冒昧的打扰一下,在网络上看到你关于ICS移植的文章,其中讲到了只有软件减速的情况下,ICS在 Launcher2启动时,就会挂掉,后来你成功的运行了Launcher2,请问是你使用了硬件加速,还是对ICS做了一些修改,如果是后者,请问修改的具体步骤是什么。。谢谢!

  • Michael 於 April 4, 2013 19:03:

    我想问下,我把安卓烧写到自己的开发板后启动时只能启动到安卓小机器人处,不能正常进入桌面,这个可能是由哪些问题引起的啊?》
    还有就是如果我是到google官方下载的源码,然后拿来自己编译再准备烧写到自己的开发板上这个需要修改哪些呢??

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。