国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

i.MX51平臺(tái)的Android系統(tǒng)移植

2013-10-11 06:23郭利全謝維波
關(guān)鍵詞:宿主機(jī)源碼鏡像

郭利全,謝維波

(1.華僑大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,福建 廈門(mén)361021;

2.華僑大學(xué) 廈門(mén)軟件園嵌入式技術(shù)開(kāi)放實(shí)驗(yàn)室,福建 廈門(mén)361008)

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

1 Android系統(tǒng)啟動(dòng)流程

1.1 Android與嵌入式Linux

Android系統(tǒng)是基于Linux內(nèi)核搭建的,Linux內(nèi)核的優(yōu)勢(shì)在于大內(nèi)存管理、進(jìn)程管理、基于權(quán)限的安全模型、統(tǒng)一的驅(qū)動(dòng)模型、對(duì)共享庫(kù)的支持和代碼開(kāi)源等.Android系統(tǒng)在設(shè)計(jì)過(guò)程之中針對(duì)移動(dòng)終端資源有限的特點(diǎn),對(duì)Linux進(jìn)行了一定程度地裁剪,去除了原生的窗口系統(tǒng)、對(duì)GUN libc的支持,并裁剪了一些標(biāo)準(zhǔn)的Linux工具.針對(duì)移動(dòng)終端的特點(diǎn),對(duì)內(nèi)核在鬧鐘、內(nèi)核調(diào)試、進(jìn)程間通信、日志、電源管理等方面作了大量地優(yōu)化.Android使用Linux完成其內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)和其他服務(wù)工作,應(yīng)用程序不會(huì)直接進(jìn)行Linux的調(diào)用,但Linux在Android中的確存在[1].

1.2 Android系統(tǒng)啟動(dòng)流程

Android可以作為嵌入式系統(tǒng)的軟件操作系統(tǒng).Bootloader是嵌入式系統(tǒng)的引導(dǎo)加載程序,也是系統(tǒng)上電后運(yùn)行的第一段程序,它除了完成基本的初始化系統(tǒng)和調(diào)用Linux內(nèi)核的基本任務(wù)外,還對(duì)Linux的啟動(dòng)參數(shù)進(jìn)行設(shè)置.Bootloader最后一項(xiàng)任務(wù)是調(diào)用Linux內(nèi)核.

Linux內(nèi)核一般存放于flash或SD卡中,但由于內(nèi)核在flash中執(zhí)行時(shí)代碼會(huì)有限制,而且速度還沒(méi)有在RAM中快,所以一般在嵌入式系統(tǒng)中都是將Linux內(nèi)核解壓到RAM中,然后跳轉(zhuǎn)到RAM中去執(zhí)行.Linux內(nèi)核啟動(dòng)完成后,會(huì)創(chuàng)建init進(jìn)程,而init進(jìn)程首先進(jìn)行一系列硬件初始化,然后通過(guò)命令行傳遞的參數(shù)掛載根文件系統(tǒng).根文件系統(tǒng)包含系統(tǒng)引導(dǎo)和使其他文件系統(tǒng)得以掛載所必需的文件,也包括Linux啟動(dòng)時(shí)所必需的目錄和關(guān)鍵性的文件.

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

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

圖1 Android系統(tǒng)啟動(dòng)流程圖Fig.1 Android system startup flowchart

2 軟硬件平臺(tái)的搭建

由于硬件平臺(tái)的特殊性及局限性,在此選用交叉開(kāi)發(fā)模式[5].交叉開(kāi)發(fā)模式是指Linux交叉開(kāi)發(fā)采用宿主機(jī)和目標(biāo)機(jī)模式進(jìn)行,宿主機(jī)是一臺(tái)運(yùn)行Linux的個(gè)人計(jì)算機(jī),目標(biāo)機(jī)為嵌入式硬件平臺(tái).開(kāi)發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編及連接工具,形成可以在目標(biāo)機(jī)上執(zhí)行的二進(jìn)制代碼,這種代碼并不能在宿主機(jī)上執(zhí)行,而只能在目標(biāo)機(jī)上執(zhí)行,然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行.調(diào)試時(shí)可以通過(guò)串口、以太網(wǎng)口等進(jìn)行.

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

3 Android系統(tǒng)的移植

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

3.1 源碼的獲取

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

Android是由kernel,Dalvik,Bionic,prebuilt等多個(gè)git項(xiàng)目組成,Android項(xiàng)目編寫(xiě)了一個(gè)名為repo的Python腳本統(tǒng)一管理這些項(xiàng)目使git的使用更加簡(jiǎn)單.Android源碼的獲取分為以下5個(gè)步驟.

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權(quán)限,使其可以直接被運(yùn)行.

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

5)repo sync-j4.由于repo sync是從源碼服務(wù)器上進(jìn)行下載,Android源碼一般在10GB左右.由于執(zhí)行時(shí)間比較長(zhǎng),可以使用多線程來(lái)并行下載,使用參數(shù)“-j4”,4是并行的線程數(shù).

Android源碼目錄及各目錄包含的內(nèi)容,如表1所示.

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

獲取Android源碼后,接著獲取u-boot及Linux內(nèi)核源碼.在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內(nèi)核源碼,保存至kernel_imx文件夾中.

3.2 Linux內(nèi)核裁剪

Linux內(nèi)核的裁剪是移植工作重要的環(huán)節(jié),不同的硬件廠商,裁剪的方式各不相同.每個(gè)硬件廠商都會(huì)提供硬件的板級(jí)支持包(即BSP).BSP可以屏蔽硬件,提供操作系統(tǒng)及硬件的驅(qū)動(dòng).本文使用板級(jí)支持包加速對(duì)Linux內(nèi)核裁剪工作.

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

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

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

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

3.3 源碼的編譯

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

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

2)lunch imx51_bbg-eng完整編譯在imx51平臺(tái)運(yùn)行,使能所有的調(diào)試方法.

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

由圖2可知:Android的版本為2.2.1,宿主機(jī)為L(zhǎng)inux操作系統(tǒng)x86CPU,目標(biāo)機(jī)為arm型CPU.對(duì)源碼的編譯配置通過(guò)指定參數(shù)進(jìn)行,本次配置參數(shù)為imx51_bbg-eng,參數(shù)含義如表2~3所示.

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

表2 平臺(tái)參數(shù)說(shuō)明Tab.2 Parameter description of platform

表3 BUILDTYPE參數(shù)說(shuō)明Tab.3 Parameter description of BUILDTYPE

3.4 鏡像的燒寫(xiě)

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

使用ATK工具將u-boot,kernel,ramdisk.img鏡像燒寫(xiě)到SD卡上,燒寫(xiě)的起始地址分別為1K,1 M,4M的地址處.使用Linux中的fdisk命令對(duì)SD卡進(jìn)行分區(qū).分區(qū)時(shí)不應(yīng)將u-boot和kenel劃入任何1個(gè)分區(qū),第1個(gè)分區(qū)從10MB的位置開(kāi)始劃分.分區(qū)后,各分區(qū)的文件系統(tǒng)信息及分區(qū)大小設(shè)計(jì),如表4所示.

表4 SD卡分區(qū)說(shuō)明Tab.4 Partition description of SD card

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

經(jīng)過(guò)以上的過(guò)程,Android系統(tǒng)平臺(tái)運(yùn)行所需的全部文件都已經(jīng)燒寫(xiě)到SD卡上.SD卡上存儲(chǔ)區(qū)域分布,如圖3所示.圖3中:MBR主要是存儲(chǔ)SD卡的分區(qū)信息,起始地址為0kB.

由圖3可知:第一個(gè)分區(qū)(Media分區(qū))從大于10MB的位置開(kāi)始劃分,可避免MBR、引導(dǎo)程序、內(nèi)核、根文件系統(tǒng)在分區(qū)中因誤操作而被破壞的情況發(fā)生,保證系統(tǒng)正常啟動(dòng).

圖3 SD卡存儲(chǔ)區(qū)域分布圖Fig.3 Storage area maps of SD card

4 Android系統(tǒng)的調(diào)試

Linux內(nèi)核開(kāi)發(fā)者為保證內(nèi)核代碼正確性,不愿在Linux內(nèi)核源代碼中加入調(diào)試器.內(nèi)核調(diào)試可采用監(jiān)視內(nèi)核代碼和錯(cuò)誤跟蹤的方法.對(duì)Android的調(diào)試方法包括Linux方法和Android特殊方法.標(biāo)準(zhǔn)Linux調(diào)試有如下3個(gè)方法.

1)啟動(dòng)Android仿真器環(huán)境,使用adb shell進(jìn)行連接,在終端使用ps查看系統(tǒng)各個(gè)進(jìn)程.也可以使用linux的proc文件系統(tǒng)跟蹤進(jìn)程相關(guān)信息.

2)使用Linux的vmstat和top命令統(tǒng)計(jì)系統(tǒng)中性能的信息.

3)使用dmesg查看內(nèi)核打印出來(lái)的信息,可以方便地跟蹤內(nèi)核狀態(tài)信息.

Android的toolbox中包含了一些非標(biāo)準(zhǔn)化的輔助命令,這些命令在Linux的Shell中沒(méi)有,專(zhuān)為Andorid系統(tǒng)所使用.Android特殊調(diào)試命令有如下4個(gè)方法.

1)使用netcfg命令進(jìn)行網(wǎng)絡(luò)配置調(diào)試,可用于檢查Android系統(tǒng)的網(wǎng)絡(luò)狀況.

2)使用service命令獲取Android系統(tǒng)已經(jīng)啟動(dòng)的服務(wù),顯示某一個(gè)服務(wù)調(diào)用進(jìn)程的情況.

3)Android的am命令可以在控制臺(tái)啟動(dòng)和管理活動(dòng)、服務(wù)和發(fā)送廣播等.

4)對(duì)基于Android系統(tǒng)的程序開(kāi)發(fā),使用logcat命令可以方便得到程序的log信息.

5 實(shí)現(xiàn)效果

Android系統(tǒng)在i.MX51平臺(tái)移植完成并調(diào)試成功后,將開(kāi)發(fā)板上的啟動(dòng)模式設(shè)置成從SD卡引導(dǎo).串口調(diào)試信息,如圖4所示.

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

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

6 結(jié)論

隨著嵌入式技術(shù)的發(fā)展,嵌入式系統(tǒng)的軟件從只有前后臺(tái)程序,發(fā)展到使用μC/OS-Ⅱ等小型操作系統(tǒng),再發(fā)展到現(xiàn)在應(yīng)用如Linux,WinCE等大型操作系統(tǒng).Android系統(tǒng)是目前最前沿的嵌入式操作系統(tǒng),雖然設(shè)計(jì)之初只是針對(duì)手機(jī)等移動(dòng)平臺(tái),但在其他非手機(jī)硬件平臺(tái)的應(yīng)用已經(jīng)成為一種趨勢(shì).只有將最前沿的嵌入式操作系統(tǒng)與硬件平臺(tái)相結(jié)合,嵌入式系統(tǒng)才會(huì)更具生命力和競(jìng)爭(zhēng)力.

所介紹的Android系統(tǒng)在i.MX51平臺(tái)的移植過(guò)程及調(diào)試方法,對(duì)Android系統(tǒng)在其他嵌入式平臺(tái)的移植具有指導(dǎo)意義.然而,由于對(duì)Linux內(nèi)核裁剪部分使用的是i.MX51的板級(jí)支持包,在其他硬件平臺(tái)的移植應(yīng)使用相應(yīng)的板級(jí)支持包,有一定的局限性,也是移植工作的不足,有待今后進(jìn)一步提高.

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

[1] 王茜.Android嵌入式系統(tǒng)架構(gòu)及內(nèi)核淺析[J].電腦開(kāi)發(fā)與應(yīng)用,2011,24(4):59-61.

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

[3] 曹木蓮,姚放吾.基于i.MX21的嵌入式Linux研究與移植[J].計(jì)算機(jī)技術(shù)與發(fā)展,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] 孫紀(jì)坤,張小全.嵌入式Linux系統(tǒng)開(kāi)發(fā)技術(shù)詳解[M].北京:人民郵電出版社,2007:129-132.

[6] 韓超,梁泉.Android系統(tǒng)級(jí)深入開(kāi)發(fā)-移植與調(diào)試[M].北京:電子工業(yè)出版社,2011:70-72.

猜你喜歡
宿主機(jī)源碼鏡像
面向數(shù)據(jù)可靠傳輸?shù)母咦g碼率帶反饋的LT碼
國(guó)內(nèi)一站式工程設(shè)備租賃平臺(tái)眾能聯(lián)合完成C2、C3兩輪融資
淺談開(kāi)源操作系統(tǒng)的歷史
鏡像
企業(yè)如何保護(hù)源碼
嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)研究
鏡像
虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
鏡像