在上周五,我將最新android系統的Linux核心2.6.29下載下來,針對我的G1手機進行了打補丁(nand flash、多點觸摸支援),並編譯出了G1的Linux核心,使用Fastboot引匯入G1,實踐證明此核心可以使用。之後便開始了向mini2440移植的工作。
我的移植和之前的網上已有的人的移植方法有不同,之前的移植者都是向已經移植好S3C2440的核心裡打Android補丁,這樣補丁量大,出錯的機會也大。而我經過考慮,決定使用反方法,先實現可以使用的Android核心,然後在這之上打上mini2440的補丁。這樣避免了打大量的補丁產生大量的錯誤。而這個2440的補丁要實現LCD 、觸控螢幕和網卡等基本驅動。
我從Tekkaman Ninja處得到了他最新的Linux-2.6.29.4的補丁(Tekkaman Ninja會在近期發布此補丁)。在去除了核心中的fusion模組(用於DFB)和Yaffs模組(G1核心已經有了)後把這個補丁打在了我的android的Linux核心2.6.29上,很快,也很順利(除了Makefile有問題之外,但很好解決,就是改一下交叉編譯器)。
然後就是配置核心,這很關鍵,我一開始大部分按照G1去配置(除了system type和一些驅動的配置),可是用在啟動到nfs檔案系統的時候就掛了。後來我根據網上的文章,只是在原來mini2440的配置上稍作修改,添加必要的android系統特有的驅動,編譯好後就可以引導最簡單的檔案系統,這說明這核心基本OK了。
要證明這個核心的可用性,只能使用android的檔案系統來測試了。在此之前已經有高人搞了一個可以在ARMV4上使用的Android檔案系統(armv4.tar.gz)。其實這個檔案系統是從openmoko 的 freerunner 的檔案系統中簡化來的。現在暫時用拿來主義先測試一下核心,以後在自己做一個。
在下載檔案系統armv4.tar.gz之後,根據網上的說明:
3.拷貝包中的system目錄到nfs中rootfs根目錄下的/system, data目錄到nfs中rootfs根目錄下的/data, root目錄中的內容到nfs中rootfs根目錄下
4.設定核心啟動參數中的init=/init,既指向根目錄下的init
5.刪除init.rc中的部分內容,去掉除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外所有的mount命令
現在就可以開啟mini2440,使用nfs作為根檔案系統。以下是啟動後的畫面: