版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第04章
編譯Android系統(tǒng)目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼
任務(wù)預(yù)覽
一、背景描述物聯(lián)網(wǎng)基礎(chǔ)開發(fā)實(shí)驗(yàn)箱上的系統(tǒng)包括三個(gè)部分,即U-boot.bin程序、Linux內(nèi)核文件zImage以及android文件系統(tǒng)映像。按照上一章講述的交叉開發(fā)環(huán)境的原理,這三個(gè)部分文件的編譯工作需要放在Linux系統(tǒng)下實(shí)現(xiàn)。這一章我們就在Ubuntu下部署好Android系統(tǒng)源碼,并實(shí)現(xiàn)對這三個(gè)部分文件的編譯。二、實(shí)驗(yàn)?zāi)康?掌握Android系統(tǒng)源碼的部署?掌握U-boot文件的編譯?掌握Linux內(nèi)核文件的編譯?掌握Android系統(tǒng)映像文件的編譯。目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼知識儲備嵌入式系統(tǒng)的開發(fā)流程嵌入式系統(tǒng)開發(fā)是一個(gè)系統(tǒng)性的工程,一個(gè)完整的開發(fā)過程總體來說包括了硬件系統(tǒng)設(shè)計(jì)、操作系統(tǒng)移植和應(yīng)用軟件設(shè)計(jì)三個(gè)部分。一、硬件系統(tǒng)設(shè)計(jì)包括了硬件體系架構(gòu)、基于Protel軟件或其他電路板設(shè)計(jì)軟件的電路圖設(shè)計(jì)、電路板廠商的電路板制作、焊接和測試、電路板調(diào)試等步驟,其目標(biāo)是獲取一個(gè)在電氣連接上沒有錯(cuò)誤、滿足設(shè)計(jì)需求的硬件電路板。二、操作系統(tǒng)移植指的是當(dāng)嵌入式硬件開發(fā)已經(jīng)完成且保證無誤之后,將一個(gè)目標(biāo)操作系統(tǒng)移植到硬件系統(tǒng)上并運(yùn)行的過程,其目標(biāo)是在硬件系統(tǒng)上運(yùn)行一個(gè)操作系統(tǒng)。以本書中涉及的操作系統(tǒng)移植過程為例,大約可以分為3個(gè)步驟1)配置和編譯Bootloader,即U-boot,然后將Bootloader下載到開發(fā)板,該程序負(fù)責(zé)初始化硬件設(shè)備、建立內(nèi)存空間的映射表、對操作系統(tǒng)進(jìn)行引導(dǎo)。2)下載操作系統(tǒng)的源代碼,建立交叉編譯環(huán)境,配置和編譯操作系統(tǒng)內(nèi)核(即LinuxKernel),并且根據(jù)硬件系統(tǒng)的特點(diǎn)對其進(jìn)行相應(yīng)的裁剪和配置,然后將操作系統(tǒng)下載到目標(biāo)板上。3)向NANDFLASH內(nèi)移植文件系統(tǒng),通常來說是YAFFS2類型的文件系統(tǒng),這樣才能形成完整的操作系統(tǒng)應(yīng)用環(huán)境。本書在這個(gè)環(huán)節(jié)選擇的是支持YAFFS2文件格式的Android系統(tǒng)。在操作系統(tǒng)移植的過程中,還需要同步建立嵌入式系統(tǒng)與開發(fā)環(huán)境之間的數(shù)據(jù)交互通道,如TFTP、NFS等,這一塊內(nèi)容在前面的章節(jié)中已經(jīng)有所涉及。三、應(yīng)用軟件設(shè)計(jì)應(yīng)用軟件設(shè)計(jì)是指在已經(jīng)移植完成操作系統(tǒng)的嵌入式系統(tǒng)上,根據(jù)系統(tǒng)的特定需求進(jìn)行軟件設(shè)計(jì)的過程,此時(shí)通常也需要交叉編譯環(huán)境。特別說明的是,本書內(nèi)容并不涉及第一個(gè)部分“硬件電路板設(shè)計(jì)”和第三個(gè)部分“應(yīng)用軟件設(shè)計(jì)”,主要圍繞第二個(gè)部分“操作系統(tǒng)移植”進(jìn)行講解。目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼一、任務(wù)描述
將實(shí)驗(yàn)箱所需的Android系統(tǒng)源碼部署到Ubuntu下,為后續(xù)的編譯工作做好準(zhǔn)備。
二、知識點(diǎn)撥
實(shí)驗(yàn)平臺Android映像固化在NandFlash中,具體存儲分配如圖所示:
1.部署ANDROID系統(tǒng)源碼從下往上,各層次完成的主要功能如下。
?U-Boot引導(dǎo)加載程序:固化在硬件Flash上的一段引導(dǎo)代碼,用于完成硬件的一些基本配置,引導(dǎo)嵌入式操作系統(tǒng)內(nèi)核啟動。
?LinuxKernel嵌入式操作系統(tǒng)內(nèi)核:包括特定于某嵌入式硬件平臺的定制操作系統(tǒng)內(nèi)核及內(nèi)核的啟動參數(shù)等。
?Android文件系統(tǒng):文件系統(tǒng)是一個(gè)嵌入式系統(tǒng)中必不可少的組成部分,它完成對存儲設(shè)備上的文件的管理工作,嵌入式操作系統(tǒng)只需要直接訪問文件系統(tǒng)所提供的接口便可以完成對磁盤上的文件的操作。
?用戶應(yīng)用程序:特定于用戶的應(yīng)用程序,有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間可能還會包括一個(gè)嵌入式圖形用戶界面。
三、任務(wù)實(shí)現(xiàn)
本節(jié)將部署Android系統(tǒng)源碼,就是要將U-boot、kernel、Android映像三個(gè)部分所對應(yīng)的源代碼放置于適當(dāng)?shù)腖inux目錄之下,為后續(xù)的編譯工作做好準(zhǔn)備。
步驟1:拷貝android源碼包到ubuntu系統(tǒng)內(nèi)
首先在教學(xué)資料光盤找到android-2.3.tgz這個(gè)打包文件,該文件容量較大(約1.11GB),內(nèi)部包含了編譯工作所需的所有源代碼文件,如圖所示。將android-2.3.tgz拷貝到ubuntu系統(tǒng)的/tmp目錄之下??截愇募姆绞娇梢詤⒖忌弦徽鹿?jié)的內(nèi)容,例如采用TFTP、Samba等文件傳輸服務(wù)來實(shí)現(xiàn);如果是vmware虛擬機(jī)的環(huán)境,則vmware-tools支持將文件由物理主機(jī)系統(tǒng)直接拖入虛擬機(jī)系統(tǒng)。下圖所示為從物理主機(jī)系統(tǒng)直接拖放文件到Ubuntu虛擬機(jī)文件夾內(nèi)。由于文件容量較大,拷貝文件需等待較長時(shí)間。當(dāng)拷貝進(jìn)度完成后,進(jìn)入ubuntu系統(tǒng)的/tmp目錄,確認(rèn)一下文件是否存在。步驟2:在/usr/local/src目錄下新建一個(gè)目錄,取名為EMBV210/usr/local/src目錄一般用于存放用戶自行下載的第三方軟件的源碼,因此實(shí)驗(yàn)中也選擇在此路徑下創(chuàng)建一個(gè)新的目錄EMBV210,這個(gè)目錄專門用于存放android-2.3.tgz解壓出的所有源碼。步驟3:將/tmp/android-2.3.tgz文件解壓到/usr/local/src/EMBV210
步驟4:查看解壓后生成的文件步驟5:根據(jù)上述查看的結(jié)果,可以確認(rèn)四個(gè)文件目錄存在,每個(gè)目錄具體功能如下:
arm-2009q3:交叉編譯工具鏈
uboot-embv210:U-boot源碼
kernel-embv210:Linux內(nèi)核源碼
froyo-embv210:Android系統(tǒng)源碼
目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼2.編譯U-boot一、任務(wù)描述編譯U-boot源碼,生成映像文件u-boot.bin二、原理介紹簡單地說,本實(shí)驗(yàn)中要生成的u-boot.bin就是一個(gè)開機(jī)引導(dǎo)程序Bootloader,它是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader(引導(dǎo)加載程序)是系統(tǒng)加電后運(yùn)行的第一段代碼,一般運(yùn)行的時(shí)間非常短,但是對于嵌入式系統(tǒng)來說,這段代碼非常重要。在我們的臺式電腦當(dāng)中,引導(dǎo)加載程序由BIOS(固件程序)和位于硬盤MBR中的操作系統(tǒng)引導(dǎo)加載程序(比如NTLOADER,GRUB和LILO)一起組成。在嵌入式系統(tǒng)當(dāng)中沒有像BIOS這樣的固件程序,不過也有一些嵌入式CPU會在芯片內(nèi)部嵌入一小段程序,一般用來將bootloader裝進(jìn)RAM中,有點(diǎn)類似BIOS,但是功能比BIOS弱很多。在一般的典型系統(tǒng)中,整個(gè)系統(tǒng)的加載啟動任務(wù)全由bootloader來完成。在ARM中,系統(tǒng)上電或復(fù)位時(shí)通常從地址0x00000000處開始執(zhí)行,而在這個(gè)位置,通常安排的就是系統(tǒng)的bootloader。本教材只介紹編譯U-boot源碼生成bin文件的過程,而對于U-boot源代碼本身如何解讀和編輯并不做具體深入的要求。三、任務(wù)實(shí)現(xiàn)步驟1:在ubuntu嵌入式開發(fā)環(huán)境下運(yùn)行終端,執(zhí)行以下命令來編譯U-boot源碼,生成映像文件u-boot.bin:步驟2:編譯成功后,將會在/usr/local/src/EMBV210/uboot-embv210目錄下看到編譯生成的映像文件u-boot.bin。將該文件拷貝到一個(gè)新建的公共文件夾保存,以備后續(xù)章節(jié)的實(shí)驗(yàn)來使用。四、拓展閱讀理解Bootloader平臺上電后,CPU首先執(zhí)行bootloader程序,即U-Boot;而后的LinuxKernel則由bootloader程序加載。Bootloader代碼是機(jī)器通電后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,主要用于完成由硬件啟動到操作系統(tǒng)啟動的過渡,從而為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU、堆棧、存儲器系統(tǒng)等。Bootloader代碼與CPU芯片的內(nèi)核結(jié)構(gòu)、具體型號、應(yīng)用系統(tǒng)的配置及使用的操作系統(tǒng)等因素有關(guān),其功能類似于PC機(jī)的BIOS程序。由于Bootloader和CPU及電路板的配置情況有關(guān),因此不可能有通用的bootloader,開發(fā)時(shí)需要用戶根據(jù)具體情況進(jìn)行移植。嵌入式Linux系統(tǒng)中常用的bootloader有armboot、redboot、blob、u-boot等,其中u-boot是當(dāng)前較流行且功能強(qiáng)大的bootloader,可以支持多種體系結(jié)構(gòu),但相對也比較復(fù)雜。Ubuntu的系統(tǒng)環(huán)境變量$PATHPATH說簡單點(diǎn)就是一個(gè)字符串變量,當(dāng)輸入命令的時(shí)候LINUX會去查找PATH里面記錄的路徑。打個(gè)比方,我們通常在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實(shí)ls這個(gè)命令的可執(zhí)行文件根本不在這個(gè)兩個(gè)目錄下。之所以linux能夠順利的執(zhí)行l(wèi)s,原因在于當(dāng)我們輸入命令的時(shí)候LINUX會去一些預(yù)先定義好的目錄下面去找我們此時(shí)輸入的命令,例如/bin目錄、/usr/bin目錄、/sbin目錄等,而系統(tǒng)環(huán)境變量PATH的值恰恰就是保存了這一系列目錄:/bin:/sbin:/usr/bin:……。當(dāng)我們運(yùn)行一個(gè)程序時(shí),Linux將會在這些目錄下搜尋編譯鏈接。PATH變量的聲明格式為:PATH=$PATH:<PATH1>:<PATH2>:------:<PATHN>
可以自己加上指定的路徑,中間用冒號隔開。為了更好理解PATH這個(gè)環(huán)境變量,我們輸入以下命令假設(shè)新安裝了一個(gè)可執(zhí)行文件在/usr/local/new/bin下面,如果想像前面說的ls一樣在任何地方都使用這個(gè)命令,就需要修改環(huán)境變量PATH了。準(zhǔn)確的說就是給PATH增加一個(gè)值/usr/local/new/bin。此時(shí)我們可以執(zhí)行一行bash命令:當(dāng)然這樣的做法只能在當(dāng)前終端運(yùn)行的環(huán)境下生效,一旦用戶注銷或者系統(tǒng)重啟后,新增的PATH變量將消失。如果希望PATH可以永久的添加新路徑,通常的做法是:把這行bash命令寫到~/.profile文件的末尾,保存文件,注銷再登錄后,變量生效。該方式添加的變量只對當(dāng)前用戶有效。目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼3.編譯Linux內(nèi)核一、任務(wù)描述編譯Linux內(nèi)核源碼,生成Linux內(nèi)核的映像文件zImage二、知識點(diǎn)撥什么是Linux內(nèi)核?內(nèi)核是Linux操作系統(tǒng)的核心,它管理所有的系統(tǒng)線程、進(jìn)程、資源和資源分配。與其它操作系統(tǒng)不同的是,Linux操作系統(tǒng)允許用戶對內(nèi)核進(jìn)行重新設(shè)置。用戶可以對內(nèi)核進(jìn)行“瘦身”,增加或消除對某些特定設(shè)備或子系統(tǒng)的支持。在開發(fā)嵌入式系統(tǒng)時(shí),開發(fā)人員經(jīng)常會減少系統(tǒng)對一些無用設(shè)備的支持,將節(jié)省下來的內(nèi)存分配給各種應(yīng)用軟件。根據(jù)實(shí)驗(yàn)箱NandFlash存儲空間的分配情況來看,Linux內(nèi)核介于Bootloader和上層Android文件系統(tǒng)之間,也就是說Bootloader啟動成功后就可以加載Linux內(nèi)核文件了,Linux內(nèi)核負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),它通過VFS(虛擬文件系統(tǒng))技術(shù)來和上層的真實(shí)文件系統(tǒng)進(jìn)行交互。三、任務(wù)實(shí)現(xiàn)步驟1:在ubuntu嵌入式開發(fā)環(huán)境下運(yùn)行終端,執(zhí)行以下命令來編譯內(nèi)核kernel的源碼生成zImage映像:(編譯過程大約會在10分鐘以內(nèi)完成,之后終端會顯現(xiàn)“Kernel:arch/arm/boot/zImageisready”的字樣,表示編譯成功了。步驟2:編譯成功后,將會在目錄下看到編譯生成的映像文件zImage。將該文件拷貝到一個(gè)公共文件夾保存,以備后續(xù)章節(jié)的實(shí)驗(yàn)使用。目錄任務(wù)三編譯Linux內(nèi)核任務(wù)二編譯U-boot任務(wù)四編譯Andoid系統(tǒng)任務(wù)預(yù)覽知識儲備本章小結(jié)任務(wù)一部署ANDROID系統(tǒng)源碼4.編譯Andoid系統(tǒng)一、任務(wù)描述編譯Android文件系統(tǒng)的源碼,生成文件系統(tǒng)映像文件embv210_root.img二、知識點(diǎn)撥用Android源碼來編譯生成一個(gè)Android系統(tǒng)注定將是一項(xiàng)比較艱巨的任務(wù),可能是整本教材所有任務(wù)中,耗時(shí)最長的任務(wù)了。本任務(wù)主要特點(diǎn)有兩個(gè):一是編譯過程中常有可能遇到錯(cuò)誤而中斷執(zhí)行,出錯(cuò)的原因往往是Ubuntu系統(tǒng)缺少某個(gè)組件或軟件依賴包,這時(shí)候就需要我們補(bǔ)充安裝相應(yīng)的軟件包,然后從頭再來,而這部分工作意味著大量的操作步驟。二是耗費(fèi)時(shí)間漫長,從所有前提條件準(zhǔn)備就緒,開始執(zhí)行make命令開始,大約需要等待至少2個(gè)小時(shí)的時(shí)間,如果使用的PC硬件性能不夠好,那么耗費(fèi)6~7個(gè)小時(shí)都是正常的。這就使得本節(jié)任務(wù)成功完成的困難大大增加。為了能夠縮短任務(wù)完成的時(shí)間,提高成功率,在任務(wù)實(shí)現(xiàn)的指導(dǎo)步驟中,我們專門將任務(wù)必須的軟件包提前安裝好,并設(shè)置好所有的運(yùn)行環(huán)境,之后再執(zhí)行編譯程序,以確保任務(wù)順利完成。三、任務(wù)實(shí)現(xiàn)步驟1:做好編譯環(huán)境的準(zhǔn)備工作,安裝一下各種軟件包(請確保ubuntu系統(tǒng)可以正常連接互聯(lián)網(wǎng))安裝bison,bison是一個(gè)自由軟件,用于自動生成語法分析器程序,實(shí)際上可用于所有常見的操作系統(tǒng)。Bison把LALR形式的上下文無關(guān)文法描述轉(zhuǎn)換為可做語法分析的C或C++程序。安裝flex,flex是基于UNIX環(huán)境的詞法分析器的生成工具。安裝java開發(fā)工具包openjdk-6-jdk安裝c和c++編譯器C和C++編譯器安裝后,還需要做適當(dāng)?shù)男薷?,使其能夠被正確調(diào)用。安裝zlib,zlib是一個(gè)著名的開源軟件包,用于數(shù)據(jù)壓縮安裝ncurses,ncurses是字符終端下屏幕控制的基本庫。能提供功能鍵定義(快捷鍵),屏幕繪
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 英國個(gè)生產(chǎn)稅制度
- 2026云南宣城市宣州區(qū)森興林業(yè)開發(fā)有限公司第一批次員工招聘5人參考考試試題附答案解析
- 生產(chǎn)區(qū)個(gè)人衛(wèi)生制度
- 費(fèi)托蠟加工生產(chǎn)制度
- 新田衛(wèi)生健康安全生產(chǎn)日工作制度
- 2026上半年云南文化藝術(shù)職業(yè)學(xué)院招聘26人備考考試試題附答案解析
- 2026年臨沂沂河新區(qū)部分事業(yè)單位公開招聘綜合類崗位工作人員(3人)參考考試試題附答案解析
- 生產(chǎn)經(jīng)營場所管理制度
- 企業(yè)安全生產(chǎn)問責(zé)制度
- 崗位安全生產(chǎn)檢查制度
- 蓬深102井鉆井工程(重新報(bào)批)項(xiàng)目環(huán)境影響報(bào)告表
- 大模型金融領(lǐng)域可信應(yīng)用參考框架
- (新教材)2025年人教版七年級上冊歷史期末復(fù)習(xí)??贾R點(diǎn)梳理復(fù)習(xí)提綱(教師版)
- 中國全色盲診療專家共識2026
- 鋼鐵工藝流程課件
- 自流平地面施工安全方案
- 2025年小學(xué)六年級數(shù)學(xué)試題探究題
- 紋樣設(shè)計(jì)上課課件
- 密閉施工安全培訓(xùn)課件
- 人工智能賦能循證教學(xué)研究
- 建筑工程勞務(wù)人員管理制度與實(shí)施策略
評論
0/150
提交評論