Android內(nèi)核開(kāi)發(fā):系統(tǒng)編譯輸出的鏡像文件

本文是《Android內(nèi)核開(kāi)發(fā)》的第四篇文章,主要介紹一下源碼編譯輸出的幾個(gè)重要的鏡像文件,這里把bootloader源碼和Linux內(nèi)核源碼的編譯輸出也算在其中,因?yàn)楫吘笰ndroid系統(tǒng)缺少了這兩個(gè)部分在設(shè)備上也是跑不起來(lái)的。

十多年的唐山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整唐山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“唐山網(wǎng)站設(shè)計(jì)”,“唐山網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1. MLO, u-boot.img

 

任何操作系統(tǒng)的啟動(dòng),都離不開(kāi)“引導(dǎo)程序”,比如桌面Windows系統(tǒng)的BIOS、桌面Linux系統(tǒng)常用的是Grub,而在嵌入式系統(tǒng)中,這個(gè)引導(dǎo)程序通常叫做“bootloader”,它通常由處理器的片上ROM中的引導(dǎo)代碼和u-boot兩部分組成(當(dāng)然,也有其他類型的bootloader,這里以最常用的u-boot為主)。

 

這些“引導(dǎo)程序”的功能,通常都是完成硬件系統(tǒng)的檢測(cè)和配置,然后到指定的位置去“加載并運(yùn)行”操作系統(tǒng)內(nèi)核,這個(gè)加載過(guò)程就是把指定的內(nèi)核鏡像文件解壓到內(nèi)存DDR中去,然后運(yùn)行內(nèi)核代碼,并交出CPU控制權(quán)。

 

由此我們知道,Android系統(tǒng)的啟動(dòng),第一個(gè)最重要的文件就是:“bootloader”?!癰ootloader”是與操作系統(tǒng)無(wú)關(guān)的,無(wú)論設(shè)備上跑的是Linux還是Android,都需要“bootloader”來(lái)啟動(dòng)引導(dǎo)。  

 

關(guān)于“bootloader”,需要解釋的是:處理器片上ROM中的引導(dǎo)代碼通常由處理器廠商實(shí)現(xiàn),我們無(wú)法獲取也無(wú)法修改,u-boot則是具體的開(kāi)發(fā)板/設(shè)備廠商實(shí)現(xiàn),如果我們自己設(shè)計(jì)Android硬件設(shè)備,則也需要去修改標(biāo)準(zhǔn)的u-boot代碼適配我們自己的硬件模塊。 

 

u-boot編譯輸出文件有2個(gè),一個(gè)是MLO,另一個(gè)是u-boot.img,因此,對(duì)于很多Android開(kāi)發(fā)板而言,一定存在一個(gè)boot分區(qū)(通常是fat32格式),該分區(qū)里存放有MLO和u-boot.img這兩個(gè)重要的文件。

2. uImage

由于Android系統(tǒng)是基于Linux內(nèi)核的,因此,與嵌入式Linux啟動(dòng)過(guò)程一樣,“bootloader”完成硬件檢測(cè)和初始化配置后,第一步要做的也是加載并運(yùn)行Linux內(nèi)核鏡像,因此,在Android設(shè)備啟動(dòng)過(guò)程中,除了MLO和u-boot.img文件外,另一個(gè)最重要的文件就是內(nèi)核鏡像uImage文件了。

注:Linux內(nèi)核編譯成功后,會(huì)在arch/arm/boot/目錄下生成zImage文件,通過(guò)mkp_w_picpath命令,給zImage文件加上了64個(gè)字節(jié)的數(shù)據(jù)頭得到uImage文件,這樣才能被u-boot識(shí)別并正確引導(dǎo)。

3. ramdisk.img

在Linux內(nèi)核啟動(dòng)時(shí),首先去創(chuàng)建虛擬的根文件系統(tǒng),然后在指定位置尋址真正的根文件系統(tǒng)鏡像并加載到內(nèi)存中,然后執(zhí)行init可執(zhí)行程序完成系統(tǒng)啟動(dòng)過(guò)程。

對(duì)于嵌入式Linux系統(tǒng)而言,一般需要用busybox等工具專門創(chuàng)建一個(gè)根文件系統(tǒng)鏡像,而Android源碼中已經(jīng)實(shí)現(xiàn)了一個(gè)根文件系統(tǒng),即ramdisk.img,Android內(nèi)核系統(tǒng)啟動(dòng)時(shí)會(huì)首先加載ramdisk.img作為根文件系統(tǒng),然后再執(zhí)行init程序,解析init.rc腳本,掛載系統(tǒng)其他分區(qū)、開(kāi)啟各個(gè)進(jìn)程和服務(wù)等。

因此,Android系統(tǒng)啟動(dòng)第三個(gè)必不可少的文件即ramdisk.img文件,它是Android系統(tǒng)的根文件系統(tǒng)鏡像。

4. boot.img

Android系統(tǒng)中,通常會(huì)把zImage和ramdisk.img打包到一起,生成一個(gè)boot.img鏡像文件,放到boot分區(qū),由bootloader來(lái)引導(dǎo)啟動(dòng),其啟動(dòng)過(guò)程本質(zhì)也是和分開(kāi)的uImage&ramdisk.img類似,只不過(guò)把兩個(gè)鏡像按照一定的格式合并為一個(gè)鏡像而已。

bootloader如何知道去哪加載Linux內(nèi)核(zImage)和根文件系統(tǒng)(ramdisk.img)呢?通常是由命令行參數(shù)傳入bootloader程序,或者在bootloader代碼中給出啟動(dòng)參數(shù)配置文件的路徑,具體的原理可以去參考bootloader啟動(dòng)Linux內(nèi)核相關(guān)的文章分析,這里就不做詳細(xì)介紹了。

5. system.img

前面我們提到的鏡像如“bootloader”,“Linux Kernel”,“文件系統(tǒng)”都是不包含Android系統(tǒng)的核心文件,那么,真正的Android操作系統(tǒng)核心部分在哪呢?其實(shí)就位于system.img中,它包含了Android系統(tǒng)的firmware、用戶界面、一系列的預(yù)編譯應(yīng)用等等,會(huì)在內(nèi)核啟動(dòng)后被掛載到/system分區(qū)。因此,它也是Android系統(tǒng)啟動(dòng)必不可少的鏡像之一。

6. userdata.img

前面介紹的system.img鏡像中包含的都是Android系統(tǒng)級(jí)別的數(shù)據(jù),而“用戶”的“出廠”數(shù)據(jù)則都被放到了userdata.img鏡像中了,它會(huì)被掛載到文件系統(tǒng)的/data分區(qū),用戶新存儲(chǔ)的數(shù)據(jù)、安裝的程序均會(huì)被放置到這個(gè)分區(qū)中,如果擦除這個(gè)分區(qū),本質(zhì)上則等同于手機(jī)恢復(fù)了出廠設(shè)置,它也是Android系統(tǒng)啟動(dòng)必不可少的鏡像之一。

7. 其他的鏡像

前面介紹的幾個(gè)都是Android系統(tǒng)啟動(dòng)涉及到的最重要的幾個(gè)鏡像文件,當(dāng)然,編譯輸出還有其他的幾個(gè)文件包括:用來(lái)緩存最頻繁訪問(wèn)的數(shù)據(jù)和應(yīng)用的cache.img,用來(lái)恢復(fù)系統(tǒng)時(shí)使用的recovery.img等,這里就不詳細(xì)講解了。

8.  小結(jié)

關(guān)于Android系統(tǒng)編譯輸出的幾個(gè)鏡像文件就介紹到這兒了,有任何疑問(wèn)歡迎留言或者來(lái)信lujun.hust@gmail.com交流,你也可以關(guān)注我的微博 @盧_俊 獲取最新的文章和資訊,謝謝。

網(wǎng)頁(yè)題目:Android內(nèi)核開(kāi)發(fā):系統(tǒng)編譯輸出的鏡像文件
路徑分享:http://www.muchs.cn/article20/ihpijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)商城網(wǎng)站、做網(wǎng)站ChatGPT、外貿(mào)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作