Android內核開發:系統編譯輸出的鏡像文件

主要介紹一下源碼編譯輸出的幾個重要的鏡像文件,這裏把bootloader源碼和Linux內核源碼的編譯輸出也算在其中,由於畢竟Android系統缺乏了這兩個部分在設備上也是跑不起來的。linux

 

1. MLO, u-boot.imgandroid

任何操做系統的啓動,都離不開「引導程序」,好比桌面Windows系統的BIOS、桌面Linux系統經常使用的是Grub,而在嵌入式系統中,這個引導程序一般叫作「bootloader」,它一般由處理器的片上ROM中的引導代碼和u-boot兩部分組成(固然,也有其餘類型的bootloader,這裏以最經常使用的u-boot爲主)。緩存

這些「引導程序」的功能,一般都是完成硬件系統的檢測和配置,而後到指定的位置去「加載並運行」操做系統內核,這個加載過程就是把指定的內核鏡像文件解壓到內存DDR中去,而後運行內核代碼,並交出CPU控制權。微信

由此咱們知道,Android系統的啓動,第一個最重要的文件就是:「bootloader」。「bootloader」是與操做系統無關的,不管設備上跑的是Linux仍是Android,都須要「bootloader」來啓動引導。  工具

關於「bootloader」,須要解釋的是:處理器片上ROM中的引導代碼一般由處理器廠商實現,咱們沒法獲取也沒法修改,u-boot則是具體的開發板/設備廠商實現,若是咱們本身設計Android硬件設備,則也須要去修改標準的u-boot代碼適配咱們本身的硬件模塊。 學習

u-boot編譯輸出文件有2個,一個是MLO,另外一個是u-boot.img,所以,對於不少Android開發板而言,必定存在一個boot分區(一般是fat32格式),該分區裏存放有MLO和u-boot.img這兩個重要的文件。操作系統

2. uImage.net

因爲Android系統是基於Linux內核的,所以,與嵌入式Linux啓動過程同樣,「bootloader」完成硬件檢測和初始化配置後,第一步要作的也是加載並運行Linux內核鏡像,所以,在Android設備啓動過程當中,除了MLO和u-boot.img文件外,另外一個最重要的文件就是內核鏡像uImage文件了。命令行

注:Linux內核編譯成功後,會在arch/arm/boot/目錄下生成zImage文件,經過mkimage命令,給zImage文件加上了64個字節的數據頭獲得uImage文件,這樣才能被u-boot識別並正確引導。設計

3. ramdisk.img

在Linux內核啓動時,首先去建立虛擬的根文件系統,而後在指定位置尋址真正的根文件系統鏡像並加載到內存中,而後執行init可執行程序完成系統啓動過程。

對於嵌入式Linux系統而言,通常須要用busybox等工具專門建立一個根文件系統鏡像,而Android源碼中已經實現了一個根文件系統,即ramdisk.img,Android內核系統啓動時會首先加載ramdisk.img做爲根文件系統,而後再執行init程序,解析init.rc腳本,掛載系統其餘分區、開啓各個進程和服務等。

所以,Android系統啓動第三個必不可少的文件即ramdisk.img文件,它是Android系統的根文件系統鏡像。

 

4. boot.img

Android系統中,一般會把zImage和ramdisk.img打包到一塊兒,生成一個boot.img鏡像文件,放到boot分區,由bootloader來引導啓動,其啓動過程本質也是和分開的uImage&ramdisk.img相似,只不過把兩個鏡像按照必定的格式合併爲一個鏡像而已。

bootloader如何知道去哪加載Linux內核(zImage)和根文件系統(ramdisk.img)呢?一般是由命令行參數傳入bootloader程序,或者在bootloader代碼中給出啓動參數配置文件的路徑,具體的原理能夠去參考bootloader啓動Linux內核相關的文章分析,這裏就不作詳細介紹了。

 

5. system.img

前面咱們提到的鏡像如「bootloader」,「Linux Kernel」,「文件系統」都是不包含Android系統的核心文件,那麼,真正的Android操做系統核心部分在哪呢?其實就位於system.img中,它包含了Android系統的firmware、用戶界面、一系列的預編譯應用等等,會在內核啓動後被掛載到/system分區。所以,它也是Android系統啓動必不可少的鏡像之一。

 

6. userdata.img

 

前面介紹的system.img鏡像中包含的都是Android系統級別的數據,而「用戶」的「出廠」數據則都被放到了userdata.img鏡像中了,它會被掛載到文件系統的/data分區,用戶新存儲的數據、安裝的程序均會被放置到這個分區中,若是擦除這個分區,本質上則等同於手機恢復了出廠設置,它也是Android系統啓動必不可少的鏡像之一。

 

7. 其餘的鏡像

 

前面介紹的幾個都是Android系統啓動涉及到的最重要的幾個鏡像文件,固然,編譯輸出還有其餘的幾個文件包括:用來緩存最頻繁訪問的數據和應用的cache.img,用來恢復系統時使用的recovery.img等,這裏就不詳細講解了。

 

結束語

 

免費學習更多精品課程,登陸樂搏學院官網http://h.learnbo.cn/

或關注咱們的官方微博微信,還有更多驚喜哦~

 

本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/1655761

相關文章
相關標籤/搜索