999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

i.MX51平臺的Android系統移植

2013-10-11 06:23:14郭利全謝維波
華僑大學學報(自然科學版) 2013年3期
關鍵詞:嵌入式調試系統

郭利全,謝維波

(1.華僑大學 計算機科學與技術學院,福建 廈門361021;

2.華僑大學 廈門軟件園嵌入式技術開放實驗室,福建 廈門361008)

近年來,隨著經濟的高速增長及科學技術的突飛猛進,人們的生活質量和生活水平有了顯著地提高,智能手機逐漸走進了人們的生活.智能手機可以方便地獲取互聯網信息,帶來高端的服務與享受.除蘋果系列使用其專用的IOS操作系統外,其他智能手機大多使用Android操作系統.Android系統具有代碼開源、兼容性好、系統可移植等特點,還具有界面美觀、應用軟件開發簡單、音視頻解碼庫齊全等優勢.Android系統的優勢使其在硬件平臺的移植顯得非常必要,將Android系統移植到非手機硬件平臺具有巨大的商業價值.i.MX51平臺是由美國Freescale公司自主研發的,中央處理器基于ARM Cortex A8核心的i.MX51處理器,主頻可擴展到1GHz.Android操作系統在i.MX51平臺上能良好地運行,這為Android系統的移植奠定了硬件基礎.本文對i.MX51平臺上的Android系統移植進行研究.

1 Android系統啟動流程

1.1 Android與嵌入式Linux

Android系統是基于Linux內核搭建的,Linux內核的優勢在于大內存管理、進程管理、基于權限的安全模型、統一的驅動模型、對共享庫的支持和代碼開源等.Android系統在設計過程之中針對移動終端資源有限的特點,對Linux進行了一定程度地裁剪,去除了原生的窗口系統、對GUN libc的支持,并裁剪了一些標準的Linux工具.針對移動終端的特點,對內核在鬧鐘、內核調試、進程間通信、日志、電源管理等方面作了大量地優化.Android使用Linux完成其內存管理、進程管理、網絡和其他服務工作,應用程序不會直接進行Linux的調用,但Linux在Android中的確存在[1].

1.2 Android系統啟動流程

Android可以作為嵌入式系統的軟件操作系統.Bootloader是嵌入式系統的引導加載程序,也是系統上電后運行的第一段程序,它除了完成基本的初始化系統和調用Linux內核的基本任務外,還對Linux的啟動參數進行設置.Bootloader最后一項任務是調用Linux內核.

Linux內核一般存放于flash或SD卡中,但由于內核在flash中執行時代碼會有限制,而且速度還沒有在RAM中快,所以一般在嵌入式系統中都是將Linux內核解壓到RAM中,然后跳轉到RAM中去執行.Linux內核啟動完成后,會創建init進程,而init進程首先進行一系列硬件初始化,然后通過命令行傳遞的參數掛載根文件系統.根文件系統包含系統引導和使其他文件系統得以掛載所必需的文件,也包括Linux啟動時所必需的目錄和關鍵性的文件.

Android系統自下而上分為linux內核及驅動層、系統運行庫和java運行環境層、應用程序框架層、應用層[2].應用程序框架層包括有java層和jni層,jni是Android程序訪問硬件抽象層的一種手段.Android系統底層采用Linux2.6內核,Android系統的啟動包括Linux啟動的全過程.在Linux啟動init進程后,init進程根據init.rc腳本文件建立起servicemanamger和zygote等最基本的服務,其中servicemanamger的功能是管理系統中各種服務,zygote的功能是建立java程序運行時的環境并啟動虛擬機,初始化建立的基本服務都是運行在java運行環境層的本地服務.zygote啟動虛擬機后,建立systemserver進程,systemserver是Android java層的系統服務模塊,主要功能是管理供Android應用開發的系統服務,最后由system server建立Android應用層要使用的服務,包括Home Activity啟動所需的Activity Manager.

Android系統啟動流程,如圖1所示.由圖1可知:Android系統的啟動是以Linux啟動為基礎,Android系統的移植包含有Linux系統的移植.嵌入式Linux的移植包括bootloader,Linux內核、根文件系統3大部分移植[3].Android系統的移植除上述移植外,還必須進行system.img,recover.img,userdata.img等鏡像的移植[4].

圖1 Android系統啟動流程圖Fig.1 Android system startup flowchart

2 軟硬件平臺的搭建

由于硬件平臺的特殊性及局限性,在此選用交叉開發模式[5].交叉開發模式是指Linux交叉開發采用宿主機和目標機模式進行,宿主機是一臺運行Linux的個人計算機,目標機為嵌入式硬件平臺.開發時使用宿主機上的交叉編譯、匯編及連接工具,形成可以在目標機上執行的二進制代碼,這種代碼并不能在宿主機上執行,而只能在目標機上執行,然后把可執行文件下載到目標機上運行.調試時可以通過串口、以太網口等進行.

本次移植過程中,宿主機為計算機,操作系統為federa 13,在宿主機上下載u-boot,Linux 2.6內核、Android源代碼,并進行交叉編譯.為了支持EABI,交叉編譯工具采用arm-none-Linux-gnueabi工具鏈.引導程序選用u-boot,Linux內核版本采用linx-2.6.31.14,Android系統版本采用froyo.編譯好鏡像后使用ATK工具通過串口進行鏡像的燒寫.

3 Android系統的移植

Android系統具有可移植性.可移植性指的是在一定程度上,軟部件從一種環境遷移到另一種環境后還能正常工作的能力.Android系統的移植需要經歷源碼的獲取、源碼裁剪、交叉編譯源碼、下載鏡像這四個步驟[6].

3.1 源碼的獲取

源碼的獲取使用git工具.git是為了幫助管理Linux內核開發而開發的一個開放源碼的分布式版本控制軟件.盡管開發之初是為了輔助Linux內核開發,但現在包括Android在內的很多其他自由開源軟件項目也使用了git.

Android是由kernel,Dalvik,Bionic,prebuilt等多個git項目組成,Android項目編寫了一個名為repo的Python腳本統一管理這些項目使git的使用更加簡單.Android源碼的獲取分為以下5個步驟.

1)yum install git,安裝git工具.

2)curl https:∥dl-ssl.google.com/dl/googlesource/git-repo/repo〉~/bin/repo下載repo腳本.3)chmod a+x~/bin/repo改變下載后的repo權限,使其可以直接被運行.

4)repo init-u https:∥android.googlesource.com/platform/manifest-b froyo.由于 Android現在的版本為4.0,本次移植工作使用的版本為2.2.使用這條語句從服務器端的master主分支中切換參數“-b”后面指定版本分支.

5)repo sync-j4.由于repo sync是從源碼服務器上進行下載,Android源碼一般在10GB左右.由于執行時間比較長,可以使用多線程來并行下載,使用參數“-j4”,4是并行的線程數.

Android源碼目錄及各目錄包含的內容,如表1所示.

表1 Android源碼目錄及作用Tab.1 Android source code directory role

獲取Android源碼后,接著獲取u-boot及Linux內核源碼.在Linux shell終端輸入以下git命令.git clone git:∥git.denx.de/u-boot.git uboot-imx獲取u-boot源碼保存至uboot-imx目錄.

git clone git:∥git.kernel.org/pub/scm/Linux/kernel/git/stable/Linux-2.6.31.y.git kernel_imx獲取Linux內核源碼,保存至kernel_imx文件夾中.

3.2 Linux內核裁剪

Linux內核的裁剪是移植工作重要的環節,不同的硬件廠商,裁剪的方式各不相同.每個硬件廠商都會提供硬件的板級支持包(即BSP).BSP可以屏蔽硬件,提供操作系統及硬件的驅動.本文使用板級支持包加速對Linux內核裁剪工作.

i.MX51的硬件支持包是以補丁文件的形式存在.BSP包下載地址為http:∥www.freescale.com.將Linux內核拷貝到Android源碼同一級目錄,對源碼打上補丁,即可完成對Linux內核的裁剪.裁剪流程有如下2個步驟.

1).imx-android-r9.2/code/r9.2/android_pach.sh.運行支持包中的bash文件,設定環境變量.

2)c_patch imx-android-r9.2/code/r9.2imx_r9.2.使用支持包為源碼打補丁.

裁剪后的Linux源碼增加了對i.mx51處理器的支持,源碼位于kernel/arch/arm/mach-mx5目錄下;對共享內存處理方式上進行了改變,增加kernel/mm/ashmem.c文件,它為進程間提供大塊內存,同時為內核提供管理和回收這些內存的機制;在驅動程序中增加了mxc目錄,包括對Android相關的驅動的支持,如IPC系統、日志系統、電源、鬧鐘管理、內存控制臺、時鐘控制的gpio,switch驅動等,也包括如圖像處理單元iPU,視頻處理單元VPU等驅動.

3.3 源碼的編譯

下載arm-none-linux-gnueabi交叉編譯工具鏈,將其bin目錄加入PATH環境變量.Android源碼的編譯過程有如下3個步驟.

1).build/envsetup.sh使用envsetup.sh腳本初始化環境變量.

2)lunch imx51_bbg-eng完整編譯在imx51平臺運行,使能所有的調試方法.

3)make-j4使用make命令進行編譯.采用4個線程的多線程編譯方式.編譯源碼的配置情況,如圖2所示.

由圖2可知:Android的版本為2.2.1,宿主機為Linux操作系統x86CPU,目標機為arm型CPU.對源碼的編譯配置通過指定參數進行,本次配置參數為imx51_bbg-eng,參數含義如表2~3所示.

圖2 Android源碼編譯配置Fig.2 Android source code compiled configuration

表2 平臺參數說明Tab.2 Parameter description of platform

表3 BUILDTYPE參數說明Tab.3 Parameter description of BUILDTYPE

3.4 鏡像的燒寫

Android系統源碼編譯完成后,在out文件夾下會生成對應的鏡像文件,包括system.img,userdata.img,ramdisk.img等鏡像.system.img包括了主要的包、庫等文件;userdata.img包括了一些用戶數據;ramdisk.img是emulator的文件系統,emulator加載這3個鏡像文件后,會把system.img和userdata.img分別加載到ramdisk文件系統中的system和userdata目錄下,ramdisk.img在文件系統中解壓后為root目錄,其中包括了init,init.rc等文件.ATK是Freescale公司開發出的一款針對MX系列CPU為核心的flash、SD卡燒錄軟件,可以用來燒錄bootloader和kernel到SD卡上.本次移植過程中使用ATK工具通過串口進行燒寫鏡像.

使用ATK工具將u-boot,kernel,ramdisk.img鏡像燒寫到SD卡上,燒寫的起始地址分別為1K,1 M,4M的地址處.使用Linux中的fdisk命令對SD卡進行分區.分區時不應將u-boot和kenel劃入任何1個分區,第1個分區從10MB的位置開始劃分.分區后,各分區的文件系統信息及分區大小設計,如表4所示.

表4 SD卡分區說明Tab.4 Partition description of SD card

在宿主機上,使用dd命令將system.img及recovery.img拷貝到sd2,sd6分區,拷貝的步驟如下:

經過以上的過程,Android系統平臺運行所需的全部文件都已經燒寫到SD卡上.SD卡上存儲區域分布,如圖3所示.圖3中:MBR主要是存儲SD卡的分區信息,起始地址為0kB.

由圖3可知:第一個分區(Media分區)從大于10MB的位置開始劃分,可避免MBR、引導程序、內核、根文件系統在分區中因誤操作而被破壞的情況發生,保證系統正常啟動.

圖3 SD卡存儲區域分布圖Fig.3 Storage area maps of SD card

4 Android系統的調試

Linux內核開發者為保證內核代碼正確性,不愿在Linux內核源代碼中加入調試器.內核調試可采用監視內核代碼和錯誤跟蹤的方法.對Android的調試方法包括Linux方法和Android特殊方法.標準Linux調試有如下3個方法.

1)啟動Android仿真器環境,使用adb shell進行連接,在終端使用ps查看系統各個進程.也可以使用linux的proc文件系統跟蹤進程相關信息.

2)使用Linux的vmstat和top命令統計系統中性能的信息.

3)使用dmesg查看內核打印出來的信息,可以方便地跟蹤內核狀態信息.

Android的toolbox中包含了一些非標準化的輔助命令,這些命令在Linux的Shell中沒有,專為Andorid系統所使用.Android特殊調試命令有如下4個方法.

1)使用netcfg命令進行網絡配置調試,可用于檢查Android系統的網絡狀況.

2)使用service命令獲取Android系統已經啟動的服務,顯示某一個服務調用進程的情況.

3)Android的am命令可以在控制臺啟動和管理活動、服務和發送廣播等.

4)對基于Android系統的程序開發,使用logcat命令可以方便得到程序的log信息.

5 實現效果

Android系統在i.MX51平臺移植完成并調試成功后,將開發板上的啟動模式設置成從SD卡引導.串口調試信息,如圖4所示.

圖4 Android OS串口打印信息圖Fig.4 Serial print of Android OS

從啟動信息中可以看出,u-boot先從MBR中讀取分區信息,將Linux鏡像解壓到RAM地址為0x9000800處,將Android鏡像解壓到地址為0x90308000處.啟動信息中也包括了CPU信息、內核版本、大小、Android文件系統版本等信息.Android平臺在i.MX51平臺啟動后,其程序測試效果圖如圖5所示.

6 結論

隨著嵌入式技術的發展,嵌入式系統的軟件從只有前后臺程序,發展到使用μC/OS-Ⅱ等小型操作系統,再發展到現在應用如Linux,WinCE等大型操作系統.Android系統是目前最前沿的嵌入式操作系統,雖然設計之初只是針對手機等移動平臺,但在其他非手機硬件平臺的應用已經成為一種趨勢.只有將最前沿的嵌入式操作系統與硬件平臺相結合,嵌入式系統才會更具生命力和競爭力.

所介紹的Android系統在i.MX51平臺的移植過程及調試方法,對Android系統在其他嵌入式平臺的移植具有指導意義.然而,由于對Linux內核裁剪部分使用的是i.MX51的板級支持包,在其他硬件平臺的移植應使用相應的板級支持包,有一定的局限性,也是移植工作的不足,有待今后進一步提高.

圖5 Android程序測試效果圖Fig.5 Effect diagram of Android application test

[1] 王茜.Android嵌入式系統架構及內核淺析[J].電腦開發與應用,2011,24(4):59-61.

[2] 李凱.Android操作系統分析與移植[D].廣州:華南理工大學,2011:59-61.

[3] 曹木蓮,姚放吾.基于i.MX21的嵌入式Linux研究與移植[J].計算機技術與發展,2009,19(9):97-98.

[4] ABHYUDAI S,SOMYA L.Android porting concepts[C]∥Proceedings of 3rd International Conference on Electronics Computer Technology.Kanyakumari:[s.n.],2011:129-133.

[5] 孫紀坤,張小全.嵌入式Linux系統開發技術詳解[M].北京:人民郵電出版社,2007:129-132.

[6] 韓超,梁泉.Android系統級深入開發-移植與調試[M].北京:電子工業出版社,2011:70-72.

猜你喜歡
嵌入式調試系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于航拍無人機的設計與調試
電子制作(2018年12期)2018-08-01 00:47:44
搭建基于Qt的嵌入式開發平臺
FOCAS功能在機床調試中的開發與應用
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
無線通信中頻線路窄帶臨界調試法及其應用
電子制作(2017年19期)2017-02-02 07:08:38
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
調壓柜的調試與試運行探討
主站蜘蛛池模板: 欧美色综合久久| 国产精品亚洲一区二区三区z| 亚洲综合精品香蕉久久网| 久草视频一区| 久热99这里只有精品视频6| 久久无码av一区二区三区| 波多野结衣国产精品| 精品无码国产一区二区三区AV| 青草国产在线视频| 国产成人精品一区二区三区| 亚洲欧洲AV一区二区三区| 夜夜高潮夜夜爽国产伦精品| 精品偷拍一区二区| 国产尹人香蕉综合在线电影 | 国产精品人莉莉成在线播放| 国产午夜不卡| 亚洲成在人线av品善网好看| 成人在线观看一区| 亚洲黄色视频在线观看一区| 久久精品人人做人人爽97| 国产视频欧美| 欧美精品亚洲精品日韩专| 欧美无专区| 亚洲精品波多野结衣| 99热国产在线精品99| 精品国产网| 国产综合在线观看视频| 久久香蕉国产线看精品| 国产精品高清国产三级囯产AV| 97久久人人超碰国产精品| 亚洲天堂网在线播放| 亚洲成av人无码综合在线观看| 欧美一区二区精品久久久| 在线观看无码av五月花| 久久国产拍爱| 真人高潮娇喘嗯啊在线观看| 美女毛片在线| 中文字幕av一区二区三区欲色| 亚洲系列中文字幕一区二区| 亚洲福利网址| 精品一區二區久久久久久久網站| 无码免费试看| 性视频一区| 免费看久久精品99| 色老二精品视频在线观看| 日本道中文字幕久久一区| www.99在线观看| 国产真实自在自线免费精品| 中文字幕在线不卡视频| 91原创视频在线| 国内精品小视频在线| 蜜臀AV在线播放| 亚洲国产午夜精华无码福利| 自慰高潮喷白浆在线观看| 国产精品不卡片视频免费观看| 成人在线亚洲| 国产欧美日韩免费| 国产成人av一区二区三区| 亚洲福利片无码最新在线播放| 亚洲嫩模喷白浆| 国产理论最新国产精品视频| 色偷偷一区| 在线亚洲小视频| 中文字幕欧美成人免费| 国产精品久久久久无码网站| 欧洲精品视频在线观看| 国产精品高清国产三级囯产AV| 久久99精品国产麻豆宅宅| 国产00高中生在线播放| 波多野结衣一区二区三区88| 亚欧乱色视频网站大全| 国产91视频免费| 中文字幕亚洲精品2页| 亚洲中文精品人人永久免费| 亚洲国产日韩一区| 国产精品嫩草影院视频| 亚洲,国产,日韩,综合一区| 精品欧美日韩国产日漫一区不卡| 精品久久久久无码| 国产亚洲男人的天堂在线观看| 91在线播放国产| 国产成人高清精品免费软件|