Android Kernel Porting 的簡單總結文檔

來源:互聯網
上載者:User

 

Simple Guide for Porting Android Kernel作者:劉旭暉 colorant@163.com 轉載請註明出處http://blog.csdn.net/colorant/ 移植Android的kernel到實際的硬體平台上,很多人很早就做過這件事了,不過相關的文檔和經驗總結不多,我就寫一個吧,也為了自己記錄一下大致的流程,以後好繼續。 1         Android核心Porting相關背景知識 1.1        運行平台Google的Android平台到今天為止(2008-2-27),應用程式層部分還是以二進位的Binary的形式發布的,其編譯的目標平台是ARM926EJ-S的CPU屬於ARMV5T的版本,所以ARMV4架構的CPU平台無法使用其二進位代碼。關於這點,可以參考下面這篇文章,Benno在此做了詳盡的理論分析和代碼測試:http://benno.id.au/blog/2007/11/21/android-neo1973所以目前只有基於ArmV5或以上的架構的平台可以實際運行Android。 1.2        軟體環境SDK下載:http://code.google.com/android/download_list.htmlKERNEL,類比環境等SRC包下載:http://code.google.com/p/android/downloads/list 1.2.1          Kernel到M5-r14 release 為止,Android的Kernel是基於Linux2.6.23的核心開發的,主要添加了一個名為Goldfish的虛擬CPU以及Android所需相關特定驅動代碼。你需要一個支援EABI的核心作為你核心Porting的起點(最低版本?不知道,只要EABI OK,應該沒有本質區別,但是,Android的很多驅動依賴於2.6.23的核心API,版本越低的核心,移植修改核心相關代碼的工作量越大) 1.2.2          Tools chainSDK中的核心使用的是4.2.1版本的GCC,基本上,你需要的是一個支援EABI的工具鏈,比如你可以使用Codesourcery的最新工具鏈:http://www.codesourcery.com/  1.2.3          其它工具Android的Emulator是一個很好的模擬工具,其底層是基於QEMU來實現的,可以使用SDK中的adb工具登陸Emulator的控制台,和控制台分頁檔等,用於擷取你所需的資訊。  1.3        相關論壇資源等http://benno.id.au/blog/http://groups.google.com/group/android-internalshttp://groups.google.com/group/android-developers 2         Porting基本思路 2.1        所需資源 2.1.1          硬體首先,當然是需要一個可以用來向上porting的硬體開發板了,對硬體的需求除了上面說的,需要ArmV5+相容的CPU以外,最低要求基本需要64M+的記憶體,64M-128M+的FLASH(取決於你負載檔案系統的方式,如果可以透過網路使用NFS-ROOT或者MMC卡等來存放檔案系統的話,這個應該就無所謂了) 2.1.2          軟體除了上述kernel和tools chain,為了方便調試,最好有靜態編譯的Busybox和Strace等工具。也可以從Benno的blog上下載到他編譯好的版本。  2.2        基本流程下載Android核心代碼下載官方2.6.23核心製作Android和2.6.23核心的diff檔案去除diff檔案中和Goldfish和QEMU相關的代碼,如果你的系統已經支援YAFFS2,還可以去除這部分代碼將diff檔案Patch到你自己的核心上,如果需要,修改核心相關檔案代碼使得patch能夠順利完成。(這部分大概是主要的工作量,如果你的核心版本差得比較遠的話 8 )如果必要,修改你的核心代碼中Framebuffer的驅動,使其Virtual_yres 等於兩倍的Yres,並實際分配兩倍解析度大小的framebuffer記憶體。配置核心,確保下列內容得到配置:CONFIG_ARM_THUMB=yCONFIG_AEABI=y
CONFIG_BINDER=y
CONFIG_ANDROID_LOG=y
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y從SDK中擷取Android的檔案系統,基本上你只需要System etc sbin init這幾個目錄/檔案就可以了,其它自建,其中data目錄是有內容的,但是這個目錄的內容可以由Android在啟動時動態建立出來。(可以使用adb工具在EMULATOR先tar封裝,再拷貝出來。M3的release也可以從benno那裡直接拿到他抓出來的檔案系統)確保你的dev目錄下有足夠系統啟動的裝置節點,如console等,其它的節點Android在啟動過程中會自動建立出來。使用NFSROOT或者chroot等手段啟動Android的檔案系統。 啟動流程的大致外在表現分階段依次是: Ø       LCD上出現Android幾個字元Ø       LCD短時間的BlankØ       LCD上出現一個左右滾動的紅色捲軸 (如果有問題,基本上就死在這一步了 8 )Ø       進入主介面 目前為止我的狀態是:鍵盤可以工作,觸控螢幕有響應但是未校準,位置不對,啟動最後階段以及之後啟動新的程式,出現Vmalloc分配記憶體Failed問題,導致如Brower等應用程式不能完全啟動。其它網路等東東還沒開始看呢 8 ) 3         一些TIPS Ø       Android會對檔案使用memory mapped的方式進行操作,JFFS2不支援這種操作,所以要使用別的檔案系統。當然也有繞過去的辦法,自己搜一下吧 8 ) Ø       為了方便測試,可以修改/etc/init.rc,注釋掉 runtime,dbus-daemon,Xzygote等相關內容,在init啟動以後再手工啟動這些進程: /system/bin/app_process -Xzygote /system/bin --zygote &/system/bin/dbus-daemon --system --nofork &sleep 1;/system/bin/runtime & Ø       Android的Init位於根目錄下,所以如果你需要直接啟動Init,可以在核心參數命令列中用init=/init 來指定,或者chroot 目錄 /init來指定。 當然,啟動/bin/sh以後,再手動啟動/init也是可以的。 Ø       /dev/binder /dev/alarm /dev/log/* 等檔案是最重要的幾個裝置節點,由於這幾個裝置節點號的主次裝置號是動態分配的,所以,最好確認你的檔案系統中的這幾個裝置節點的主次裝置號是否正確。如果不知道如何確認,直接刪除掉再重啟 8 ) Ø       如果flash速度太慢或者nfs網路連接太差,可以將data tmp這兩個目錄mount到記憶體裡,前提是你的記憶體足夠大 8 ) Ø       如果啟動過程中,紅色捲軸速度太快(和emulator裡的表現比較),runtime或者system_server進程CPU佔用率接近100%,那麼你可以修改一下你的framebuffer代碼中pan_display相關的函數的代碼,保證其調用返回時得到足夠的幀同步延遲時間。據Google的swetland給我的說法是:This is usually indicative of lack of vsync/pageflip in the fb driver.The surfaceflinger believes it will be limited by the vsync rate and the startup animation depends on that. Ø       目前的Android的核心代碼有M3-r20和M5-r14兩個版本,這兩個版本對binder和power兩個驅動做了較大的修改,上層的檔案系統和核心必須配套使用。( 另,我的板子上,M5版本可以跑起來,M3的版本會出現段錯誤,沒跑起來 :(。如果一個版本實在跑不起來,不妨試試別的版本) Ø       使用strace去跟蹤問題!
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.