編譯Android系統(tǒng) 課件_第1頁
編譯Android系統(tǒng) 課件_第2頁
編譯Android系統(tǒng) 課件_第3頁
編譯Android系統(tǒng) 課件_第4頁
編譯Android系統(tǒng) 課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第04章

編譯Android系統(tǒng)目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼

任務預覽

一、背景描述物聯(lián)網(wǎng)基礎開發(fā)實驗箱上的系統(tǒng)包括三個部分,即U-boot.bin程序、Linux內(nèi)核文件zImage以及android文件系統(tǒng)映像。按照上一章講述的交叉開發(fā)環(huán)境的原理,這三個部分文件的編譯工作需要放在Linux系統(tǒng)下實現(xiàn)。這一章我們就在Ubuntu下部署好Android系統(tǒng)源碼,并實現(xiàn)對這三個部分文件的編譯。二、實驗目的?掌握Android系統(tǒng)源碼的部署?掌握U-boot文件的編譯?掌握Linux內(nèi)核文件的編譯?掌握Android系統(tǒng)映像文件的編譯。目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼知識儲備嵌入式系統(tǒng)的開發(fā)流程嵌入式系統(tǒng)開發(fā)是一個系統(tǒng)性的工程,一個完整的開發(fā)過程總體來說包括了硬件系統(tǒng)設計、操作系統(tǒng)移植和應用軟件設計三個部分。一、硬件系統(tǒng)設計包括了硬件體系架構(gòu)、基于Protel軟件或其他電路板設計軟件的電路圖設計、電路板廠商的電路板制作、焊接和測試、電路板調(diào)試等步驟,其目標是獲取一個在電氣連接上沒有錯誤、滿足設計需求的硬件電路板。二、操作系統(tǒng)移植指的是當嵌入式硬件開發(fā)已經(jīng)完成且保證無誤之后,將一個目標操作系統(tǒng)移植到硬件系統(tǒng)上并運行的過程,其目標是在硬件系統(tǒng)上運行一個操作系統(tǒng)。以本書中涉及的操作系統(tǒng)移植過程為例,大約可以分為3個步驟1)配置和編譯Bootloader,即U-boot,然后將Bootloader下載到開發(fā)板,該程序負責初始化硬件設備、建立內(nèi)存空間的映射表、對操作系統(tǒng)進行引導。2)下載操作系統(tǒng)的源代碼,建立交叉編譯環(huán)境,配置和編譯操作系統(tǒng)內(nèi)核(即LinuxKernel),并且根據(jù)硬件系統(tǒng)的特點對其進行相應的裁剪和配置,然后將操作系統(tǒng)下載到目標板上。3)向NANDFLASH內(nèi)移植文件系統(tǒng),通常來說是YAFFS2類型的文件系統(tǒng),這樣才能形成完整的操作系統(tǒng)應用環(huán)境。本書在這個環(huán)節(jié)選擇的是支持YAFFS2文件格式的Android系統(tǒng)。在操作系統(tǒng)移植的過程中,還需要同步建立嵌入式系統(tǒng)與開發(fā)環(huán)境之間的數(shù)據(jù)交互通道,如TFTP、NFS等,這一塊內(nèi)容在前面的章節(jié)中已經(jīng)有所涉及。三、應用軟件設計應用軟件設計是指在已經(jīng)移植完成操作系統(tǒng)的嵌入式系統(tǒng)上,根據(jù)系統(tǒng)的特定需求進行軟件設計的過程,此時通常也需要交叉編譯環(huán)境。特別說明的是,本書內(nèi)容并不涉及第一個部分“硬件電路板設計”和第三個部分“應用軟件設計”,主要圍繞第二個部分“操作系統(tǒng)移植”進行講解。目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼一、任務描述

將實驗箱所需的Android系統(tǒng)源碼部署到Ubuntu下,為后續(xù)的編譯工作做好準備。

二、知識點撥

實驗平臺Android映像固化在NandFlash中,具體存儲分配如圖所示:

1.部署ANDROID系統(tǒng)源碼從下往上,各層次完成的主要功能如下。

?U-Boot引導加載程序:固化在硬件Flash上的一段引導代碼,用于完成硬件的一些基本配置,引導嵌入式操作系統(tǒng)內(nèi)核啟動。

?LinuxKernel嵌入式操作系統(tǒng)內(nèi)核:包括特定于某嵌入式硬件平臺的定制操作系統(tǒng)內(nèi)核及內(nèi)核的啟動參數(shù)等。

?Android文件系統(tǒng):文件系統(tǒng)是一個嵌入式系統(tǒng)中必不可少的組成部分,它完成對存儲設備上的文件的管理工作,嵌入式操作系統(tǒng)只需要直接訪問文件系統(tǒng)所提供的接口便可以完成對磁盤上的文件的操作。

?用戶應用程序:特定于用戶的應用程序,有時在用戶應用程序和內(nèi)核層之間可能還會包括一個嵌入式圖形用戶界面。

三、任務實現(xiàn)

本節(jié)將部署Android系統(tǒng)源碼,就是要將U-boot、kernel、Android映像三個部分所對應的源代碼放置于適當?shù)腖inux目錄之下,為后續(xù)的編譯工作做好準備。

步驟1:拷貝android源碼包到ubuntu系統(tǒng)內(nèi)

首先在教學資料光盤找到android-2.3.tgz這個打包文件,該文件容量較大(約1.11GB),內(nèi)部包含了編譯工作所需的所有源代碼文件,如圖所示。將android-2.3.tgz拷貝到ubuntu系統(tǒng)的/tmp目錄之下??截愇募姆绞娇梢詤⒖忌弦徽鹿?jié)的內(nèi)容,例如采用TFTP、Samba等文件傳輸服務來實現(xiàn);如果是vmware虛擬機的環(huán)境,則vmware-tools支持將文件由物理主機系統(tǒng)直接拖入虛擬機系統(tǒng)。下圖所示為從物理主機系統(tǒng)直接拖放文件到Ubuntu虛擬機文件夾內(nèi)。由于文件容量較大,拷貝文件需等待較長時間。當拷貝進度完成后,進入ubuntu系統(tǒng)的/tmp目錄,確認一下文件是否存在。步驟2:在/usr/local/src目錄下新建一個目錄,取名為EMBV210/usr/local/src目錄一般用于存放用戶自行下載的第三方軟件的源碼,因此實驗中也選擇在此路徑下創(chuàng)建一個新的目錄EMBV210,這個目錄專門用于存放android-2.3.tgz解壓出的所有源碼。步驟3:將/tmp/android-2.3.tgz文件解壓到/usr/local/src/EMBV210

步驟4:查看解壓后生成的文件步驟5:根據(jù)上述查看的結(jié)果,可以確認四個文件目錄存在,每個目錄具體功能如下:

arm-2009q3:交叉編譯工具鏈

uboot-embv210:U-boot源碼

kernel-embv210:Linux內(nèi)核源碼

froyo-embv210:Android系統(tǒng)源碼

目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼2.編譯U-boot一、任務描述編譯U-boot源碼,生成映像文件u-boot.bin二、原理介紹簡單地說,本實驗中要生成的u-boot.bin就是一個開機引導程序Bootloader,它是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。Bootloader(引導加載程序)是系統(tǒng)加電后運行的第一段代碼,一般運行的時間非常短,但是對于嵌入式系統(tǒng)來說,這段代碼非常重要。在我們的臺式電腦當中,引導加載程序由BIOS(固件程序)和位于硬盤MBR中的操作系統(tǒng)引導加載程序(比如NTLOADER,GRUB和LILO)一起組成。在嵌入式系統(tǒng)當中沒有像BIOS這樣的固件程序,不過也有一些嵌入式CPU會在芯片內(nèi)部嵌入一小段程序,一般用來將bootloader裝進RAM中,有點類似BIOS,但是功能比BIOS弱很多。在一般的典型系統(tǒng)中,整個系統(tǒng)的加載啟動任務全由bootloader來完成。在ARM中,系統(tǒng)上電或復位時通常從地址0x00000000處開始執(zhí)行,而在這個位置,通常安排的就是系統(tǒng)的bootloader。本教材只介紹編譯U-boot源碼生成bin文件的過程,而對于U-boot源代碼本身如何解讀和編輯并不做具體深入的要求。三、任務實現(xiàn)步驟1:在ubuntu嵌入式開發(fā)環(huán)境下運行終端,執(zhí)行以下命令來編譯U-boot源碼,生成映像文件u-boot.bin:步驟2:編譯成功后,將會在/usr/local/src/EMBV210/uboot-embv210目錄下看到編譯生成的映像文件u-boot.bin。將該文件拷貝到一個新建的公共文件夾保存,以備后續(xù)章節(jié)的實驗來使用。四、拓展閱讀理解Bootloader平臺上電后,CPU首先執(zhí)行bootloader程序,即U-Boot;而后的LinuxKernel則由bootloader程序加載。Bootloader代碼是機器通電后進入操作系統(tǒng)之前執(zhí)行的一段代碼,主要用于完成由硬件啟動到操作系統(tǒng)啟動的過渡,從而為操作系統(tǒng)提供基本的運行環(huán)境,如初始化CPU、堆棧、存儲器系統(tǒng)等。Bootloader代碼與CPU芯片的內(nèi)核結(jié)構(gòu)、具體型號、應用系統(tǒng)的配置及使用的操作系統(tǒng)等因素有關(guān),其功能類似于PC機的BIOS程序。由于Bootloader和CPU及電路板的配置情況有關(guān),因此不可能有通用的bootloader,開發(fā)時需要用戶根據(jù)具體情況進行移植。嵌入式Linux系統(tǒng)中常用的bootloader有armboot、redboot、blob、u-boot等,其中u-boot是當前較流行且功能強大的bootloader,可以支持多種體系結(jié)構(gòu),但相對也比較復雜。Ubuntu的系統(tǒng)環(huán)境變量$PATHPATH說簡單點就是一個字符串變量,當輸入命令的時候LINUX會去查找PATH里面記錄的路徑。打個比方,我們通常在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實ls這個命令的可執(zhí)行文件根本不在這個兩個目錄下。之所以linux能夠順利的執(zhí)行l(wèi)s,原因在于當我們輸入命令的時候LINUX會去一些預先定義好的目錄下面去找我們此時輸入的命令,例如/bin目錄、/usr/bin目錄、/sbin目錄等,而系統(tǒng)環(huán)境變量PATH的值恰恰就是保存了這一系列目錄:/bin:/sbin:/usr/bin:……。當我們運行一個程序時,Linux將會在這些目錄下搜尋編譯鏈接。PATH變量的聲明格式為:PATH=$PATH:<PATH1>:<PATH2>:------:<PATHN>

可以自己加上指定的路徑,中間用冒號隔開。為了更好理解PATH這個環(huán)境變量,我們輸入以下命令假設新安裝了一個可執(zhí)行文件在/usr/local/new/bin下面,如果想像前面說的ls一樣在任何地方都使用這個命令,就需要修改環(huán)境變量PATH了。準確的說就是給PATH增加一個值/usr/local/new/bin。此時我們可以執(zhí)行一行bash命令:當然這樣的做法只能在當前終端運行的環(huán)境下生效,一旦用戶注銷或者系統(tǒng)重啟后,新增的PATH變量將消失。如果希望PATH可以永久的添加新路徑,通常的做法是:把這行bash命令寫到~/.profile文件的末尾,保存文件,注銷再登錄后,變量生效。該方式添加的變量只對當前用戶有效。目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼3.編譯Linux內(nèi)核一、任務描述編譯Linux內(nèi)核源碼,生成Linux內(nèi)核的映像文件zImage二、知識點撥什么是Linux內(nèi)核?內(nèi)核是Linux操作系統(tǒng)的核心,它管理所有的系統(tǒng)線程、進程、資源和資源分配。與其它操作系統(tǒng)不同的是,Linux操作系統(tǒng)允許用戶對內(nèi)核進行重新設置。用戶可以對內(nèi)核進行“瘦身”,增加或消除對某些特定設備或子系統(tǒng)的支持。在開發(fā)嵌入式系統(tǒng)時,開發(fā)人員經(jīng)常會減少系統(tǒng)對一些無用設備的支持,將節(jié)省下來的內(nèi)存分配給各種應用軟件。根據(jù)實驗箱NandFlash存儲空間的分配情況來看,Linux內(nèi)核介于Bootloader和上層Android文件系統(tǒng)之間,也就是說Bootloader啟動成功后就可以加載Linux內(nèi)核文件了,Linux內(nèi)核負責管理系統(tǒng)的進程、內(nèi)存、設備驅(qū)動程序、文件和網(wǎng)絡系統(tǒng),它通過VFS(虛擬文件系統(tǒng))技術(shù)來和上層的真實文件系統(tǒng)進行交互。三、任務實現(xiàn)步驟1:在ubuntu嵌入式開發(fā)環(huán)境下運行終端,執(zhí)行以下命令來編譯內(nèi)核kernel的源碼生成zImage映像:(編譯過程大約會在10分鐘以內(nèi)完成,之后終端會顯現(xiàn)“Kernel:arch/arm/boot/zImageisready”的字樣,表示編譯成功了。步驟2:編譯成功后,將會在目錄下看到編譯生成的映像文件zImage。將該文件拷貝到一個公共文件夾保存,以備后續(xù)章節(jié)的實驗使用。目錄任務三編譯Linux內(nèi)核任務二編譯U-boot任務四編譯Andoid系統(tǒng)任務預覽知識儲備本章小結(jié)任務一部署ANDROID系統(tǒng)源碼4.編譯Andoid系統(tǒng)一、任務描述編譯Android文件系統(tǒng)的源碼,生成文件系統(tǒng)映像文件embv210_root.img二、知識點撥用Android源碼來編譯生成一個Android系統(tǒng)注定將是一項比較艱巨的任務,可能是整本教材所有任務中,耗時最長的任務了。本任務主要特點有兩個:一是編譯過程中常有可能遇到錯誤而中斷執(zhí)行,出錯的原因往往是Ubuntu系統(tǒng)缺少某個組件或軟件依賴包,這時候就需要我們補充安裝相應的軟件包,然后從頭再來,而這部分工作意味著大量的操作步驟。二是耗費時間漫長,從所有前提條件準備就緒,開始執(zhí)行make命令開始,大約需要等待至少2個小時的時間,如果使用的PC硬件性能不夠好,那么耗費6~7個小時都是正常的。這就使得本節(jié)任務成功完成的困難大大增加。為了能夠縮短任務完成的時間,提高成功率,在任務實現(xiàn)的指導步驟中,我們專門將任務必須的軟件包提前安裝好,并設置好所有的運行環(huán)境,之后再執(zhí)行編譯程序,以確保任務順利完成。三、任務實現(xiàn)步驟1:做好編譯環(huán)境的準備工作,安裝一下各種軟件包(請確保ubuntu系統(tǒng)可以正常連接互聯(lián)網(wǎng))安裝bison,bison是一個自由軟件,用于自動生成語法分析器程序,實際上可用于所有常見的操作系統(tǒng)。Bison把LALR形式的上下文無關(guān)文法描述轉(zhuǎn)換為可做語法分析的C或C++程序。安裝flex,flex是基于UNIX環(huán)境的詞法分析器的生成工具。安裝java開發(fā)工具包openjdk-6-jdk安裝c和c++編譯器C和C++編譯器安裝后,還需要做適當?shù)男薷模蛊淠軌虮徽_調(diào)用。安裝zlib,zlib是一個著名的開源軟件包,用于數(shù)據(jù)壓縮安裝ncurses,ncurses是字符終端下屏幕控制的基本庫。能提供功能鍵定義(快捷鍵),屏幕繪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論