亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2094 | 回復(fù): 0
打印 上一主題 下一主題

Simple guid for porting android kernel [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-11-09 15:34 |只看該作者 |倒序瀏覽
作者:劉旭暉 colorant@163.com 轉(zhuǎn)載請注明出處
http://blog.csdn.net/colorant/
移植Android的kernel到實際的硬件平臺上,很多人很早就做過這件事了,不過相關(guān)的文檔和經(jīng)驗總結(jié)不多,我就寫一個吧,也為了自己記錄一下大致的流程,以后好繼續(xù)。
1         Android內(nèi)核Porting相關(guān)背景知識
1.1        運行平臺
Google的Android平臺到今天為止(2008-2-27),應(yīng)用層部分還是以二進(jìn)制的Binary的形式發(fā)布的,其編譯的目標(biāo)平臺是ARM926EJ-S的CPU屬于ARMV5T的版本,所以ARMV4架構(gòu)的CPU平臺無法使用其二進(jìn)制代碼。關(guān)于這點,可以參考下面這篇文章,Benno在此做了詳盡的理論分析和代碼測試:http://benno.id.au/blog/2007/11/21/android-neo1973
所以目前只有基于ArmV5或以上的架構(gòu)的平臺可以實際運行Android。
1.2        軟件環(huán)境
SDK下載:http://code.google.com/android/download_list.html
KERNEL,模擬環(huán)境等SRC包下載:http://code.google.com/p/android/downloads/list
1.2.1          Kernel
到M5-r14 release 為止,Android的Kernel是基于Linux2.6.23的內(nèi)核開發(fā)的,主要添加了一個名為Goldfish的虛擬CPU以及Android所需相關(guān)特定驅(qū)動代碼。
你需要一個支持EABI的內(nèi)核作為你內(nèi)核Porting的起點(最低版本?不知道,只要EABI OK,應(yīng)該沒有本質(zhì)區(qū)別,但是,Android的很多驅(qū)動依賴于2.6.23的內(nèi)核API,版本越低的內(nèi)核,移植修改內(nèi)核相關(guān)代碼的工作量越大)
1.2.2          Tools chain
SDK中的內(nèi)核使用的是4.2.1版本的GCC,基本上,你需要的是一個支持EABI的工具鏈,比如你可以使用Codesourcery的最新工具鏈:http://www.codesourcery.com/
1.2.3          其它工具
Android的Emulator是一個很好的仿真工具,其底層是基于QEMU來實現(xiàn)的,可以使用SDK中的adb工具登陸Emulator的控制臺,和控制臺交換文件等,用于獲取你所需的信息。
1.3        相關(guān)論壇資源等
http://benno.id.au/blog/
http://groups.google.com/group/android-internals
http://groups.google.com/group/android-developers
2         Porting基本思路
2.1        所需資源
2.1.1          硬件
首先,當(dāng)然是需要一個可以用來向上porting的硬件開發(fā)板了,對硬件的需求除了上面說的,需要ArmV5+兼容的CPU以外,最低要求基本需要64M+的內(nèi)存,64M-128M+的FLASH(取決于你加載文件系統(tǒng)的方式,如果可以透過網(wǎng)絡(luò)使用NFS-ROOT或者M(jìn)MC卡等來存放文件系統(tǒng)的話,這個應(yīng)該就無所謂了)
2.1.2          軟件
除了上述kernel和tools chain,為了方便調(diào)試,最好有靜態(tài)編譯的Busybox和Strace等工具。也可以從Benno的blog上下載到他編譯好的版本。
2.2        基本流程
下載Android內(nèi)核代碼
下載官方2.6.23內(nèi)核
制作Android和2.6.23內(nèi)核的diff文件
去除diff文件中和Goldfish和QEMU相關(guān)的代碼,如果你的系統(tǒng)已經(jīng)支持YAFFS2,還可以去除這部分代碼
將diff文件Patch到你自己的內(nèi)核上,如果需要,修改內(nèi)核相關(guān)文件代碼使得patch能夠順利完成。(這部分大概是主要的工作量,如果你的內(nèi)核版本差得比較遠(yuǎn)的話 8 )
如果必要,修改你的內(nèi)核代碼中Framebuffer的驅(qū)動,使其Virtual_yres 等于兩倍的Yres,并實際分配兩倍分辨率大小的framebuffer內(nèi)存。
配置內(nèi)核,確保下列內(nèi)容得到配置:
CONFIG_ARM_THUMB=y
CONFIG_AEABI=y
CONFIG_BINDER=y
CONFIG_ANDROID_LOG=y
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
從SDK中獲取Android的文件系統(tǒng),基本上你只需要System etc sbin init這幾個目錄/文件就可以了,其它自建,其中data目錄是有內(nèi)容的,但是這個目錄的內(nèi)容可以由Android在啟動時動態(tài)的創(chuàng)建出來。(可以使用adb工具在EMULATOR先tar包裝,再拷貝出來。M3的release也可以從benno那里直接拿到他抓出來的文件系統(tǒng))
確保你的dev目錄下有足夠系統(tǒng)啟動的設(shè)備節(jié)點,如console等,其它的節(jié)點Android在啟動過程中會自動創(chuàng)建出來。
使用NFSROOT或者chroot等手段啟動Android的文件系統(tǒng)。
啟動流程的大致外在表現(xiàn)分階段依次是:
Ø       LCD上出現(xiàn)Android幾個字符
Ø       LCD短時間的Blank
Ø       LCD上出現(xiàn)一個左右滾動的紅色滾動條 (如果有問題,基本上就死在這一步了 8 )
Ø       進(jìn)入主界面
目前為止我的狀態(tài)是:鍵盤可以工作,觸摸屏有響應(yīng)但是未校準(zhǔn),位置不對,啟動最后階段以及之后啟動新的程序,出現(xiàn)Vmalloc分配內(nèi)存Failed問題,導(dǎo)致如Brower等應(yīng)用程序不能完全啟動。其它網(wǎng)絡(luò)等東東還沒開始看呢 8 )
3         一些TIPS
Ø       Android會對文件使用memory mapped的方式進(jìn)行操作,JFFS2不支持這種操作,所以要使用別的文件系統(tǒng)。當(dāng)然也有繞過去的辦法,自己搜一下吧 8 )
即http://nemustech.blogspot.com/說的方法:
* if you have jffs2 for / patch /init
* modify with hexedit : "/system_property" -> "/tmp/sy_property"
* NOTE: jffs2 does not support memory mapped file
Ø       為了方便測試,可以修改/etc/init.rc,注釋掉 runtime,dbus-daemon,Xzygote等相關(guān)內(nèi)容,在init啟動以后再手工啟動這些進(jìn)程:
/system/bin/app_process -Xzygote /system/bin --zygote &
/system/bin/dbus-daemon --system --nofork &
sleep 1;
/system/bin/runtime &
Ø       Android的Init位于根目錄下,所以如果你需要直接啟動Init,可以在內(nèi)核參數(shù)命令行中用init=/init 來指定,或者chroot 目錄 /init來指定。 當(dāng)然,啟動/bin/sh以后,再手動啟動/init也是可以的。
Ø       /dev/binder /dev/alarm /dev/log/* 等文件是最重要的幾個設(shè)備節(jié)點,由于這幾個設(shè)備節(jié)點號的主次設(shè)備號是動態(tài)分配的,所以,最好確認(rèn)你的文件系統(tǒng)中的這幾個設(shè)備節(jié)點的主次設(shè)備號是否正確。如果不知道如何確認(rèn),直接刪除掉再重啟 8 )
Ø       如果flash速度太慢或者nfs網(wǎng)絡(luò)連接太差,可以將data tmp這兩個目錄mount到內(nèi)存里,前提是你的內(nèi)存足夠大 8 )
Ø       如果啟動過程中,紅色滾動條速度太快(和emulator里的表現(xiàn)比較),runtime或者system_server進(jìn)程CPU占用率接近100%,那么你可以修改一下你的framebuffer代碼中pan_display相關(guān)的函數(shù)的代碼,保證其調(diào)用返回時得到足夠的幀同步延遲時間。據(jù)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的內(nèi)核代碼有M3-r20和M5-r14兩個版本,這兩個版本對binder和power兩個驅(qū)動做了較大的修改,上層的文件系統(tǒng)和內(nèi)核必須配套使用。( 另,我的板子上,M5版本可以跑起來,M3的版本會出現(xiàn)段錯誤,沒跑起來 :(。如果一個版本實在跑不起來,不妨試試別的版本)
Ø       使用strace去跟蹤問題!


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/85805/showart_2089932.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP