版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、android系統(tǒng)移植講解,2011-5-16,硬件需求,RAM:512MB FLASH:256MB CPU: ARM平臺(tái)指令集要求 ARM9 Family以上,ARMv5以上指令集, mips平臺(tái)指令集要求 MIPS32 revision 2 - Little-Endian, O32,軟件需求,Linux2.6以上版本,目前froyo(v2.2)對(duì)應(yīng)于linux2.6.32 - linux2.6.35版本,最好是使用android官方網(wǎng)可以下載到的代碼【目前l(fā)inux2.6.23官方網(wǎng)下不了,最低也是linux2.6.25】 Android源碼,移植主要四大模塊,1、bootload運(yùn)行起來(lái)
2、,無(wú)論使用u-boot還是fastboot,主要是關(guān)于flash分區(qū)問(wèn)題 2、linux kernel 主要涉及到android driver層驅(qū)動(dòng)代碼 3、android 系統(tǒng)移植 4、應(yīng)用程序移植 【后面則詳細(xì)講解各個(gè)模塊的移植過(guò)程】,Bootload,一般使用u-boot或者fastboot,主要的工作就是flash分區(qū)問(wèn)題,一般劃分為如下幾個(gè)分區(qū): 1、fastboot 【快速啟動(dòng),裸板啟動(dòng)區(qū)】 2、recovery 【系統(tǒng)恢復(fù)分區(qū)】 recovery就好比外套,fastboot就好比內(nèi)褲 3、kernel 【linux內(nèi)核分區(qū)】 4、system 【android核心系統(tǒng)分區(qū)】 5、
3、userdata 【用戶數(shù)據(jù)分區(qū)】 6、factorydata【工廠數(shù)據(jù)分區(qū)】,linux kernel,由于android系統(tǒng)對(duì)于linux kernel的限制,首先是要選定合 適的kernel版本,然后剩下的工作就是整個(gè)一個(gè)全新的kernel代碼,系統(tǒng)移植有三份kernel代碼需要集成 1、機(jī)頂盒廠商提供的linux源碼,包含有針對(duì)平臺(tái)的驅(qū)動(dòng)代碼及修改 2、官方網(wǎng)站下載的linux源碼,與廠商的版本可能有所不同 3、增加了android linux driver的源碼,這部分已經(jīng)從linux kernel中分離開(kāi)來(lái),需要單獨(dú)移植 所以首要的問(wèn)題是將三份統(tǒng)一到一起,目標(biāo)是支持 廠商驅(qū)動(dòng),支持
4、android驅(qū)動(dòng)以及更新到一定 linux內(nèi)核版本(android driver +sdk driver + linux kernel ) 這部分工作需要深入到linux kernel driver層代碼,一定的 技術(shù)功底+細(xì)心,Kernel移植要點(diǎn),1、盡可能將硬件平臺(tái)相關(guān)的代碼從舊版移植到新版本 2、針對(duì)硬件平臺(tái)相關(guān)的代碼,以舊版本為主,畢竟舊版的是可以正常運(yùn)行的版本, 3、非硬件平臺(tái)相關(guān)代碼盡量使用新版本 4、若遇到不知如何處理問(wèn)題,先跳過(guò),記錄下該文件及修改點(diǎn),這部分需要多參考部份原碼進(jìn)行移植 5、對(duì)于配置.config文件,需要根據(jù)相關(guān)功能進(jìn)行修改及配置,可以從模擬器上拿到conf
5、ig.gz文件解開(kāi)即可 6、編譯及測(cè)式,采用nfs掛載根文件系統(tǒng),一般遇到kernel panic錯(cuò)誤時(shí),打開(kāi)kernel debug,printk加打印,或者disable此功能進(jìn)行調(diào)試,我的移植過(guò)程(一),1、移植boot-loader和linux2.6內(nèi)核到目標(biāo)平臺(tái)上,讓linux內(nèi)核可以啟動(dòng)起來(lái),基本的驅(qū)動(dòng)運(yùn)行正常 2、修改內(nèi)核配置文件,打開(kāi)Android必須的驅(qū)動(dòng),比如binder,logger,ashemem,pmem等 3、為了提高啟動(dòng)速度,采用ramdisk,將android文件系統(tǒng)的部分內(nèi)容壓縮到內(nèi)核中 4、根據(jù)分區(qū)表修改內(nèi)核啟動(dòng)參數(shù),例如mem=352M console=t
6、tyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 rw啟動(dòng)的第一個(gè)應(yīng)用程序是/init 5、確??刂婆_(tái)的設(shè)置和硬件保持一致,如:硬件上串口用的是UART1,則內(nèi)核啟動(dòng)參數(shù)中設(shè)置有console=ttyAMA0 與啟動(dòng)參數(shù)中保持一致,我的移植過(guò)程(二),6、修改android源代碼system/core/rootdir目錄下的init.rc文件,android默認(rèn)yaffs2文件系統(tǒng),所以制作system.img也是yaffs2及l(fā)inux kernel配置成支持yaffs2文件系統(tǒng),首先將android文件系統(tǒng)修改成可讀寫(xiě) mount ro
7、otfs rootfs / rw remount 7、編譯busybox將其加入到system中作為命令使用 總結(jié): android的移植按如下流程: 1、android linux內(nèi)核的普通驅(qū)動(dòng)移植,讓內(nèi)核可以在目標(biāo)平臺(tái)上運(yùn)行起來(lái)。 2、正確掛載文件系統(tǒng),確保內(nèi)核啟動(dòng)參數(shù)和android源代碼system/core/rootdir目錄下的init.rc中的文件系統(tǒng)掛載正確。 3、調(diào)試控制臺(tái),讓內(nèi)核啟動(dòng)參數(shù)中的console參數(shù)以及android源代碼system/core/init/init.c中的console_name設(shè)置和硬件保持一致 4、打開(kāi)android相關(guān)的驅(qū)動(dòng)(logger,b
8、inder等),串口輸入logcat看logger驅(qū)動(dòng)起來(lái),沒(méi)有的話調(diào)試logger驅(qū)動(dòng)。,Android系統(tǒng)移植,Android從Linux系統(tǒng)啟動(dòng)有4個(gè)步驟; 1、init進(jìn)程啟動(dòng) (systemcoreinit中的main函數(shù)) init進(jìn)程,它是一個(gè)由內(nèi)核啟動(dòng)的用戶級(jí)進(jìn)程。內(nèi)核自行啟動(dòng)(已經(jīng)被載入內(nèi)存,開(kāi)始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過(guò)啟動(dòng)一個(gè)用戶級(jí)程序init的方式,完成引導(dǎo)進(jìn)程,此后android將接管所有工作,這里涉及到兩個(gè)腳本文件:init.rc 及 init.xxx.rc【arch】 2、Native服務(wù)啟動(dòng) Servicemanager和zyg
9、ote進(jìn)程就奠定了Android的基礎(chǔ)。Zygote這個(gè)進(jìn)程起來(lái)才會(huì)建立起真正的Android運(yùn)行空間,主要是Zytote創(chuàng)建JAVA 虛擬機(jī),裝載classes等 【受精卵,典型的C/S結(jié)構(gòu),請(qǐng)求生產(chǎn),fork子進(jìn)程,ok,生了】,啟動(dòng)步驟,3、System Server服務(wù)循環(huán)框架 Android服務(wù)啟動(dòng)不停的通過(guò)Zygote fork新的進(jìn)程,并建立了一大堆服務(wù),并add Service到service Manager,Android的所有服務(wù)循環(huán)框架都是建立SystemServer(SystemServer.java)上 4、Home啟動(dòng) 啟動(dòng)完所有的Android服務(wù)后,然后啟動(dòng)第一
10、個(gè)home應(yīng)用程序,即第一個(gè)啟動(dòng)HomeActivity 應(yīng)用程序,總體啟動(dòng)框架圖示,HAL接口實(shí)現(xiàn),Android系統(tǒng)的移植就是kernel+HAL層接口實(shí)現(xiàn)【不過(guò)這是最理想的做法了,實(shí)現(xiàn)上簡(jiǎn)單的這么做難道很大的】 Hardware Abtraction Layer,即硬件抽象層,目的就是使用自已平臺(tái)的硬件適配層為系統(tǒng)加速,發(fā)揮硬件平臺(tái)的最大性能,未定義則使用軟實(shí)現(xiàn)。 HAL層調(diào)用方式 JNI-通用硬件模塊-硬件模塊-內(nèi)核驅(qū)動(dòng)接口,即android frameworks中JNI調(diào)用/hardware/libhardware/hardware.c中定義的hw_get_module函數(shù)來(lái)獲取硬件
11、模塊,然后調(diào)用硬件模塊中的方法,硬件模塊中的方法直接調(diào)用內(nèi)核接口完成相關(guān)功能,接口層調(diào)用關(guān)系,HAL接口定義原則,1、同類設(shè)備有多個(gè)時(shí)只定義一個(gè)設(shè)備名稱,調(diào)用open函數(shù)全部打開(kāi)【對(duì)于設(shè)備打開(kāi)需要很多資源的并且很少使用的可以后續(xù)分配內(nèi)存,以便內(nèi)存浪費(fèi)】 2、接口定義以效率為先,發(fā)揮平臺(tái)最大性能 3、模塊劃分明確,方便調(diào)試及集成 4、類型的結(jié)構(gòu)充分利用C Struct的數(shù)據(jù)排列特性:基本結(jié)構(gòu)體放置在最前面,本地私有放置在后面,滿足了抽象的需要,以struct hw_module_t common;及struct hw_device_t common; 置前,主要模塊介紹,hardware.h 通
12、用硬件模塊頭文件 gralloc.h 主要定義graphics device,至少需要雙緩沖framebuffer,硬件沒(méi)有則使用ashemem或pmem實(shí)現(xiàn) copybit.h 2D加速函數(shù),如blit/stretch overlay.h 加速視頻數(shù)據(jù)輸出,疊加于主顯示區(qū)之上,機(jī)頂盒上一般使用視頻層輸出 tuner.h 鎖頻功能定義 demux.h 解復(fù)用功能定義 media.h 媒體播放功能定義,包含av dec/output,并且虛擬定義了video window概念 OpenGl 3D接口實(shí)現(xiàn),移植平臺(tái)前期可以先行使用軟件libagl.so,HAL后續(xù)解讀,生成的所有模塊都以*.so動(dòng)
13、態(tài)庫(kù),各個(gè)動(dòng)態(tài)庫(kù)之間定義了一個(gè)hal_common.so用于各個(gè)動(dòng)態(tài)間全局變量調(diào)用,對(duì)上層接口透明 下面直接講解HAL層代碼頭文件,關(guān)于圖形部分移植,1、如果處理器只有2D硬件加速而沒(méi)有3D硬件加速,則可以利用opengl中的libagl,實(shí)現(xiàn)封裝在libagl里的copybit,即libagl + copybit 2、如果處理器2D/3D硬件加速均有,那么可以丟開(kāi) copybit,去實(shí)現(xiàn)openGL ES2D/3D API 的加速功能 3、對(duì)于hisi來(lái)說(shuō),有專門的2D和3D硬件加速,但由于3D對(duì)于數(shù)據(jù)(surfcae或者紋理)搬移速度不理想(40ms-7ms差異),所以實(shí)現(xiàn)glDrawAr
14、rays實(shí)現(xiàn)copybit功能實(shí)現(xiàn),加速邏輯加載流程(egl.cpp),全局變量gEGLImpl 定義IMPL_HARDWARE= 0, IMPL_SOFTWARE 利用egl_init_drivers_locked填充gEGLImp數(shù)組變量,即加載不同的動(dòng)態(tài)(硬件和軟件加速驅(qū)動(dòng)) libGLES_android.so 軟件庫(kù) 【libagl】 libGLES_HWxxxxx.so 硬件庫(kù) OpenGl的函數(shù)賦值于hooks結(jié)構(gòu) 利用配置文件/system/lib/egl/egl.cfg 進(jìn)行選擇 loader.open - load_driver 進(jìn)行函數(shù)指針賦值,Copybit功能實(shí)現(xiàn)(2
15、D加速),主要包含塊搬移及位圖拉伸或旋轉(zhuǎn)的功能,實(shí)現(xiàn)copybit_device_t結(jié)構(gòu)即可 基本調(diào)用層次關(guān)系,對(duì)于OpenGl調(diào)用補(bǔ)充下: 可選宏定義LIBAGL_USE_GRALLOC_COPYBIT SglDrawArrays-drawPrimitivesTriangleFan-copybit 調(diào)用到平臺(tái)Copybit函數(shù),使用2D對(duì)surfaceFlinger實(shí)現(xiàn)塊搬移,LayerBuffer,OpenGl,Copybit 硬件抽象層,硬件支持,hisi即為TDE層,圖形系統(tǒng)層次關(guān)系,顯示FrameBuffer在系統(tǒng)中就是一段內(nèi)存,GDI的工作就是把需要輸出的內(nèi) 容放入到該段內(nèi)存的某個(gè)
16、位置,ui層調(diào)用代碼FramebufferNativewindow.cpp,圖形緩沖區(qū)管理,接口體現(xiàn)在gralloc.h接口中,實(shí)現(xiàn)硬件FrameBuffer內(nèi)存管理及共享緩存管理 接口調(diào)用邏輯: gralloc_device_open根據(jù)不同情況: gpu分配空間,調(diào)用gralloc_alloc,hisi統(tǒng)一使用fb實(shí)現(xiàn) fb分配空間,調(diào)用fb_device_open,打開(kāi)/dev/fb0 其它內(nèi)存分配,調(diào)用gralloc_alloc_buffer 使用PMEM或者ASHMEM mapFrameBufferLocked 真正分配fb緩沖區(qū)函數(shù),這里一次性打開(kāi)所有fb,后面直接偏移地址使用即可
17、(gralloc_alloc_framebuffer_locked) 句柄傳遞使用private_handle_t 與 buffer_handle_t轉(zhuǎn)換,兩者繼承關(guān)系:struct private_handle_t : public native_handle,圖形3D實(shí)現(xiàn),接口代碼:androidframeworksbaseopengl 實(shí)現(xiàn)代碼:graphics3ddriveropenGLegl 實(shí)現(xiàn)接口 entries.in,Alsa-lib音頻部分,1、首先linux kernel + android external (alsa-utils+alsa-lib)代碼編譯 2、實(shí)現(xiàn)hardwar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)計(jì)專業(yè)畢業(yè)生實(shí)習(xí)報(bào)告集合八篇
- 會(huì)計(jì)專業(yè)實(shí)習(xí)工作總結(jié)
- DB12T 447-2011 托兒所 幼兒園消毒衛(wèi)生規(guī)范
- DB12T 543-2014 南水北調(diào)工程監(jiān)理管理規(guī)范
- 中秋節(jié)老師的慰問(wèn)信(6篇)
- 七夕節(jié)詩(shī)意文案(140句)
- 看電影課件教學(xué)課件
- DB12∕T 1051-2021 地面風(fēng)速觀測(cè)數(shù)據(jù)均一化處理技術(shù)規(guī)程
- 高等數(shù)學(xué)教程 上冊(cè) 第4版 測(cè)試題 高數(shù)2-測(cè)試二
- 課件母版教學(xué)課件
- ICH技術(shù)指導(dǎo)原則概述
- 15D503利用建筑物金屬體做防雷及接地裝置安裝圖集
- 消防訓(xùn)練工作研討材料
- 醫(yī)患雙方權(quán)利和義務(wù)課件
- 高三年級(jí)班級(jí)成績(jī)分析報(bào)告
- 整形美容科品管圈PDCA匯報(bào)模板-通過(guò)綜合性護(hù)理干預(yù)措施降低疤痕發(fā)生率
- 小學(xué)心理健康教育-團(tuán)體心理輔導(dǎo)教學(xué)課件設(shè)計(jì)
- 國(guó)際貿(mào)易業(yè)務(wù)流程圖(完整資料)
- 國(guó)際海上人命安全公約
- DB51T 3007-2023四川省農(nóng)田生態(tài)溝渠構(gòu)建技術(shù)規(guī)范
- 凝血基礎(chǔ)知識(shí)專家講座
評(píng)論
0/150
提交評(píng)論