Android系統(tǒng)移植講解_第1頁
Android系統(tǒng)移植講解_第2頁
Android系統(tǒng)移植講解_第3頁
Android系統(tǒng)移植講解_第4頁
Android系統(tǒng)移植講解_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

android系統(tǒng)移植講解硬件需求RAM:512MBFLASH:256MBCPU:

ARM平臺指令集要求

ARM9Family以上,ARMv5以上指令集,

mips平臺指令集要求

MIPS32revision2-Little-Endian,O32軟件需求Linux2.6以上版本,目前froyo(v2.2)對應(yīng)于linux2.6.32-linux2.6.35版本,最好是使用android官方網(wǎng)可以下載到的代碼【目前l(fā)inux2.6.23官方網(wǎng)下不了,最低也是linux2.6.25】Android源碼移植主要四大模塊1、bootload運行起來,無論使用u-boot還是fastboot,主要是關(guān)于flash分區(qū)問題2、linuxkernel主要涉及到androiddriver層驅(qū)動代碼3、android系統(tǒng)移植4、應(yīng)用程序移植

【后面則詳細講解各個模塊的移植過程】Bootload一般使用u-boot或者fastboot,主要的工作就是flash分區(qū)問題,一般劃分為如下幾個分區(qū):1、fastboot【快速啟動,裸板啟動區(qū)】2、recovery【系統(tǒng)恢復(fù)分區(qū)】recovery就好比外套,fastboot就好比內(nèi)衣3、kernel【linux內(nèi)核分區(qū)】4、system【android核心系統(tǒng)分區(qū)】5、userdata【用戶數(shù)據(jù)分區(qū)】6、factorydata【工廠數(shù)據(jù)分區(qū)】linuxkernel由于android系統(tǒng)對于linuxkernel的限制,首先是要選定合適的kernel版本,然后剩下的工作就是整個一個全新的kernel代碼,系統(tǒng)移植有三份kernel代碼需要集成1、機頂盒廠商提供的linux源碼,包含有針對平臺的驅(qū)動代碼及修改2、官方網(wǎng)站下載的linux源碼,與廠商的版本可能有所不同3、增加了androidlinuxdriver的源碼,這部分已經(jīng)從linuxkernel中分離開來,需要單獨移植

所以首要的問題是將三份統(tǒng)一到一起,目標(biāo)是支持廠商驅(qū)動,支持android驅(qū)動以及更新到一定

linux內(nèi)核版本(androiddriver+sdkdriver+linuxkernel)這部分工作需要深入到linuxkerneldriver層代碼,一定的技術(shù)功底+細心Kernel移植要點1、盡可能將硬件平臺相關(guān)的代碼從舊版移植到新版本2、針對硬件平臺相關(guān)的代碼,以舊版本為主,畢竟舊版的是可以正常運行的版本,3、非硬件平臺相關(guān)代碼盡量使用新版本4、若遇到不知如何處理問題,先跳過,記錄下該文件及修改點,這部分需要多參考部份原碼進行移植5、對于配置.config文件,需要根據(jù)相關(guān)功能進行修改及配置,可以從模擬器上拿到config.gz文件解開即可6、編譯及測式,采用nfs掛載根文件系統(tǒng),一般遇到kernelpanic錯誤時,打開kerneldebug,printk加打印,或者disable此功能進行調(diào)試移植過程(一)1、移植boot-loader和linux2.6內(nèi)核到目標(biāo)平臺上,讓linux內(nèi)核可以啟動起來,基本的驅(qū)動運行正常2、修改內(nèi)核配置文件,打開Android必須的驅(qū)動,比如binder,logger,ashemem,pmem等3、為了提高啟動速度,采用ramdisk,將android文件系統(tǒng)的部分內(nèi)容壓縮到內(nèi)核中4、根據(jù)分區(qū)表修改內(nèi)核啟動參數(shù),例如mem=352Mconsole=ttyAMA0,115200root=/dev/mtdblock2rootfstype=yaffs2rw啟動的第一個應(yīng)用程序是/init5、確??刂婆_的設(shè)置和硬件保持一致,如:硬件上串口用的是UART1,則內(nèi)核啟動參數(shù)中設(shè)置有console=ttyAMA0

與啟動參數(shù)中保持一致移植過程(二)6、修改android源代碼system/core/rootdir目錄下的init.rc文件,android默認yaffs2文件系統(tǒng),所以制作system.img也是yaffs2及l(fā)inuxkernel配置成支持yaffs2文件系統(tǒng),首先將android文件系統(tǒng)修改成可讀寫mountrootfsrootfs/rwremount

7、編譯busybox將其加入到system中作為命令使用總結(jié):android的移植按如下流程:1、androidlinux內(nèi)核的普通驅(qū)動移植,讓內(nèi)核可以在目標(biāo)平臺上運行起來。2、正確掛載文件系統(tǒng),確保內(nèi)核啟動參數(shù)和android源代碼system/core/rootdir目錄下的init.rc中的文件系統(tǒng)掛載正確。3、調(diào)試控制臺,讓內(nèi)核啟動參數(shù)中的console參數(shù)以及android源代碼system/core/init/init.c中的console_name設(shè)置和硬件保持一致4、打開android相關(guān)的驅(qū)動(logger,binder等),串口輸入logcat看logger驅(qū)動起來,沒有的話調(diào)試logger驅(qū)動。Android啟動步驟Android從Linux系統(tǒng)啟動有4個步驟;1、

init進程啟動(system\core\init\中的main函數(shù))init進程,它是一個由內(nèi)核啟動的用戶級進程。內(nèi)核自行啟動(已經(jīng)被載入內(nèi)存,開始運行,并已初始化所有的設(shè)備驅(qū)動程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過啟動一個用戶級程序init的方式,完成引導(dǎo)進程,此后android將接管所有工作,這里涉及到兩個腳本文件:init.rc及init.xxx.rc【arch】2、

Native服務(wù)啟動

Servicemanager和zygote進程就奠定了Android的基礎(chǔ)。Zygote這個進程起來才會建立起真正的Android運行空間,主要是Zytote創(chuàng)建JAVA虛擬機,裝載classes等

【受精卵,典型的C/S結(jié)構(gòu),請求生產(chǎn),fork子進程,ok,生了】啟動步驟3、

SystemServer服務(wù)循環(huán)框架

Android服務(wù)啟動不停的通過Zygotefork新的進程,并建立了一大堆服務(wù),并addService到serviceManager,Android的所有服務(wù)循環(huán)框架都是建立SystemServer@(SystemServer.java)上4、

Home啟動啟動完所有的Android服務(wù)后,然后啟動第一個home應(yīng)用程序,即第一個啟動HomeActivity應(yīng)用程序總體啟動框架圖示HAL接口實現(xiàn)Android系統(tǒng)的移植就是kernel+HAL層接口實現(xiàn)【不過這是最理想的做法了,實現(xiàn)上簡單的這么做難道很大的】HardwareAbtractionLayer,即硬件抽象層,目的就是使用自已平臺的硬件適配層為系統(tǒng)加速,發(fā)揮硬件平臺的最大性能,未定義則使用軟實現(xiàn)。HAL層調(diào)用方式

JNI->通用硬件模塊->硬件模塊->內(nèi)核驅(qū)動接口,即androidframeworks中JNI調(diào)用/hardware/libhardware/hardware.c中定義的hw_get_module函數(shù)來獲取硬件模塊,然后調(diào)用硬件模塊中的方法,硬件模塊中的方法直接調(diào)用內(nèi)核接口完成相關(guān)功能接口層調(diào)用關(guān)系HAL接口定義原則1、同類設(shè)備有多個時只定義一個設(shè)備名稱,調(diào)用open函數(shù)全部打開【對于設(shè)備打開需要很多資源的并且很少使用的可以后續(xù)分配內(nèi)存,以便內(nèi)存浪費】2、接口定義以效率為先,發(fā)揮平臺最大性能3、模塊劃分明確,方便調(diào)試及集成4、類型的結(jié)構(gòu)充分利用CStruct的數(shù)據(jù)排列特性:基本結(jié)構(gòu)體放置在最前面,本地私有放置在后面,滿足了抽象的需要,以structhw_module_tcommon;及structhw_device_tcommon;置前主要法模塊約介紹ha湊rd花wa忘re筍.h通用毀硬件臉模塊籍頭文旱件gr抵al之lo張c.什h主要產(chǎn)定義gr捆ap胃hi散cs晌d割ev震ic論e,至腫少需遷要雙軟緩沖fr捆am找eb刺uf脆fe末r,硬子件沒抬有則腿使用as其he紗me蜜m或pm猜em實現(xiàn)co練py惰bi度t.僚h隨2且D加速前函數(shù)頭,如bl猜it飄/s墨tr川et乞chov吐er蒙la北y.見h加速娛視頻柳數(shù)據(jù)軟輸出如,疊鼓加于壞主顯閱示區(qū)位之上室,機桌頂盒麻上一懶般使間用視沫頻層泊輸出tu風(fēng)ne森r.撕h鎖頻通功能制定義de裕mu潑x.獻h解復(fù)鮮用功同能定膽義me脖di剖a.鉛h媒體墻播放驢功能繞定義鍛,包貝含av衛(wèi)d歪ec晌/o循ut原pu里t,并且者虛擬道定義櫻了vi之de諒o喇wi芹nd班ow概念Op費en鴉Gl劍3責(zé)D接口武實現(xiàn)妄,移任植平鑼臺前但期可洽以先智行使辦用軟頓件li鈔ba赴gl畏.s訊oHA信L后續(xù)探解讀生成趙的所植有模妹塊都值以*.s呀o動態(tài)針庫,消各個攝動態(tài)肅庫之?dāng)r間定鉤義了輸一個ha過l_默co震mm假on翁.s悔o用于膊各個上動態(tài)良間全采局變題量調(diào)攤用,賴對上鎮(zhèn)層接饒口透賤明下面利直接爹講解HA名L層代吩碼頭宏文件關(guān)于拒圖形商部分梢移植1、如更果處愿理器穩(wěn)只有2D硬件屈加速盒而沒性有3D硬件致加速浪,則粗可以宏利用op渡en咬gl中的li越ba踢gl,鄙實現(xiàn)唱封裝徐在li波ba煉gl里的co堡py陸bi棵t,即li獅ba窯gl旨+嘉c誓op連yb較it2、如偏果處統(tǒng)理器2D瓣/3簡D硬件昂加速袋均有侮,那木么可站以丟效開co摧py街bi典t,去光實現(xiàn)op滔en膝GL梯E需S甘2D火/3莫D捐AP懂I的加互速功酸能3、對打于hi蠶si來說修,有吃專門扇的2D和3D硬件侵加速僅,但赴由于3D對于固數(shù)據(jù)(s伐ur質(zhì)fc衣ae或者鄰紋理)搬移徹速度辟不理偉想(4間0m荒s-市7m置s差異),所摔以實旗現(xiàn)gl妨Dr化aw擦Ar啦ra桃ys實現(xiàn)co朱py挪bi圾t功能付實現(xiàn)加速飯邏輯棍加載唐流程框(eg攤l.歌cp獵p)全局汁變量gE杰GL秩Im冷pl定義IM粉PL猛_H狼AR光DW葉AR渣E=棗0爹,脫IM透PL功_S吊OF芳TW步AR燒E利用eg番l_灶in框it于_d香ri御ve宣rs視_l身oc何ke由d填充gE劣GL耀Im詞p數(shù)組豎變量,即加侵載不賴同的梨動態(tài)案(硬泳件和爪軟件迫加速猴驅(qū)動污)li說bG傭LE于S_暑an鑒dr仗oi倉d.私so軟件鴨庫【l農(nóng)ib趨ag逃l】li吃bG語LE憲S_醬HW罵xx永xx丑x.螺so硬件嗽庫Op碗en放Gl的函元數(shù)賦旁值于ho弱ok錘s結(jié)構(gòu)利用器配置場文件/s齊ys膀te算m/欣li漁b/勿eg暮l/筋eg謠l.留cf晉g進行賄選擇lo饑ad掀er株.o壯pe渾n->沸l(wèi)諒oa理d_刻dr役iv京er進行東函數(shù)仗指針翁賦值Co竭py浴bi批t功能府實現(xiàn)葬(2D加速做)主要千包含勉塊搬假移及凝位圖掏拉伸準(zhǔn)或旋診轉(zhuǎn)的經(jīng)功能,實現(xiàn)co噸py冤bi株t_適de堅vi腐ce敲_t結(jié)構(gòu)迷即可基本鵲調(diào)用越層次肆關(guān)系,對于Op誰en扯Gl調(diào)用察補充戴下:可選兩宏定養(yǎng)義LIB素AG翠L_插US趕E_衰GR勿AL鬼LO系C_刃CO城PY倆BI濟TSgl駁Dr仆aw乳Ar靠ra劍ys琴->佛dr英aw耳Pr肯im險it收iv志es股Tr咬ia淚ng恐le幅Fa敢n-購>c德op艦yb喬it調(diào)用橋到平占臺Co較py勵bi鄭t函數(shù)結(jié),使祝用2D對su凳rf茶ac忙eF闊li饞ng群er實現(xiàn)粒塊搬來移La超ye讓rB喬uf格fe距rOp綿en薯GlCo朵py仆bi揚t硬件蜻抽象僅層硬件匹支持亂,hi敵si即為TD丟E層圖形哥系統(tǒng)律層次焦關(guān)系顯示Fr救am艇eB偏uf究fe啦r在系劑統(tǒng)中牢就是汪一段槳內(nèi)存,G謙DI的工替作就棒是把首需要悄輸出彎的內(nèi)容放懂入到就該段狀內(nèi)存定的某怨個位未置,u綢i層調(diào)貍用代塘碼Fr昨am友eb潤uf缸fe知rN弓at轎iv充ew果in纖do墓w.擱cp敲p圖形炭緩沖平區(qū)管否理接口梯體現(xiàn)賞在gr框al詠lo且c.翅h接口劈燕中,弟實現(xiàn)并硬件Fr超am鞭eB矮uf按fe霸r內(nèi)存幅管理巡壽及共穩(wěn)享緩鎮(zhèn)存管餃理接口街調(diào)用陷邏輯資:gr妖al航lo喪c_耳de置vi掀ce暑_o嗚pe勸n根據(jù)更不同像情況:gp裙u分配喉空間,調(diào)用gr較al良lo噴c_述al橋lo待c,棵hi檔si統(tǒng)一厘使用fb實現(xiàn)fb分配耗空間,調(diào)用fb佛_d浩ev幣ic伴e_益op喝en,打曬開/d閑ev胡/f佳b0其它僻內(nèi)存笛分配,調(diào)用gr厘al洞lo挪c_眨al薯lo喇c_奇bu購ff屠er使用PM映EM或者AS詠HM娛EMma斑pF渣ra刑me胖Bu碼ff泳er章Lo槐ck定ed真正駛分配fb緩沖農(nóng)區(qū)函畢數(shù),璃這里多一次濕性打某開所掙有fb,后春面直家接偏騎移地戒址使鋸用即味可(g岸ra開ll姿oc旨_a冤ll惜oc弊_f插ra陶me查bu弱ff炕er可_l柔oc伙ke蕩d)句柄毒傳遞壇使用pr潮iv撒at累e_鎖ha易nd局le夏_t與bu謠ff蛙er緩_h測an災(zāi)dl懼e_曲t轉(zhuǎn)換,兩者梳繼承將關(guān)系:s箱tr懸uc乖t只pr梳iv駁at并e_笑ha棵nd刮le土_t宴:族p側(cè)ub題li偷c盲na鼠ti律ve叼_h戚an那dl趁e圖形3D實現(xiàn)接口泉代碼罵:an護dr顧oi恥d\男fr激am霸ew妄or辨ks胖\b采as訂e\鐮op腸en舊gl實現(xiàn)相代碼英:gr材ap爐hi晚cs每\3變d\頸dr櫻iv柄er見\o帽p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論