|  | |
| 嵌入式Android系統移植 | |
| Android系統移植工作的目的是為了在特定的硬件上運行Android系統,由于Android系統用的是linux內核,因此內核移植和嵌入式linux內核移(yi)植差異不大,過程(cheng)如下: (1)移(yi)植boot-loader和(he)linux2.6內核(he)到目標平臺上(shang),讓linux內核(he)可(ke)以啟動起(qi)來,基本的驅動允許(xu)正常(chang)。     (2)修改內核配置文件,打開Android必須的驅動(日志和BINDER)如下: (3)為了提高啟動速度,采(cai)用ramdisk,將android文件系(xi)統的(de)部分內(nei)容壓縮到內(nei)核中。     首先打開內核驅動:   然(ran)后在android源代碼編譯出來的out/target/product/merlin/root目錄復(fu)制(zhi)到內核(he)目錄下(xia)。 (4)根據android文件系(xi)統的要求對nand flash進行重新分(fen)區,舉例如下:     將nand flash分區以下8個分區     (5)根據分區表修改內核啟動參數如下: 參數的意思(si)是:載(zai)入的文件系(xi)統(tong)部分(fen)有(you)3個分(fen)區(qu),分(fen)別為(wei)nand flash的第4,5,6分(fen)區(qu)(從0編號),文件系(xi)統(tong)采用ubifs格式(shi),控制臺(tai)設備(bei)為(wei)ttyS1,波特(te)率為(wei)115200 啟動的第一(yi)個應用程(cheng)序是(shi)/init     (6)確保控制臺的設置和硬件保持一致,如:硬件上串口用的是UART1,則內核啟動參數中設置有console=ttyS1,而且android的啟動過程中設要設置正確,修改部分位于android源代碼system/core/init/init.c文件中, (7)修(xiu)改android源(yuan)代碼system/core/rootdir目錄下(xia)的(de)init.rc文件(jian),作如(ru)下(xia)修(xiu)改(android默認yaffs2文件(jian)系統(tong)):     首先將android文件系統修改成可讀寫,     然后修改掛載system和userdata部分的代碼, (8)完成后編譯內(nei)核,可以啟動文件系(xi)統,控(kong)制臺可用,但是沒有顯(xian)示啟動log,而且(qie)不停的重啟。   (9)系統不停的重啟,因此(ci)控制臺已經可用了(le),自然而然的想到看到logcat日志,一(yi)看,發現logcat設備居然沒起來,配(pei)置文件里面都(dou)定義了(le) 居然(ran)沒(mei)(mei)起(qi)來,查看(kan)了下內核drivers/staging/android目錄(lu),沒(mei)(mei)有.o文(wen)件,證(zheng)明是沒(mei)(mei)編譯到(dao),在看(kan)內核目錄(lu)下的.config文(wen)件,發現居然(ran)沒(mei)(mei)有了  logcat和binder的宏(hong)定(ding)義,配置文(wen)件(jian)里(li)面有定(ding)義而.config文(wen)件(jian)中無定(ding)義,肯定(ding)是相(xiang)關Kconfig文(wen)件(jian)的問題,通(tong)過(guo)分(fen)析drivers/staging目錄下的  Kconfig文件(jian)(jian)發現是(shi)因為STAGING_EXCLUDE_BUILD宏默認是(shi)y,在配置文件(jian)(jian)中否定此宏即(ji)可,在配置文件(jian)(jian)中CONFIG_STAGING定義(yi)后加上(shang)即(ji)可,如(ru)下:     CONFIG_STAGING=y 修(xiu)改(gai)后重新編譯發現系統完(wan)成(cheng)正常(chang)(chang)啟動(dong),啟動(dong)過程中(zhong)啟動(dong)log也顯示正常(chang)(chang)。   至此,android初(chu)步(bu)移植工作已經完成,當然,系統還有很多問題(ti),需要下一(yi)步(bu)繼續修改。 android系統移植流程小結: (1)android linux內核的普(pu)通驅動(dong)移植(zhi),讓(rang)內核可以在目標平臺上運行起來(lai)。 (2)正(zheng)確(que)(que)掛載文(wen)件系統,確(que)(que)保內(nei)核啟(qi)動(dong)參(can)數和(he)android源代碼system/core/rootdir目(mu)錄下的init.rc中的文(wen)件系統掛載正(zheng)確(que)(que)。 (3)調(diao)試控制臺,讓內核啟動(dong)參(can)數(shu)中(zhong)的console參(can)數(shu)以及android源代碼system/core/init/init.c中(zhong)的console_name設置(zhi)和(he)硬件保持(chi)一致(zhi) (4)打開(kai)android相關的驅動(logger,binder等),串(chuan)口輸(shu)入(ru)logcat看(kan)logger驅動起來,沒(mei)有的話調試(shi)logger驅動。(ARM的內(nei)核配置文件(jian)定義在內(nei)核arch/arm/configs目錄下。) 熱點鏈接: 
         1、嵌入式Linux串口編程基礎 |