一、Android ROM的各大分區(qū)

1.boot分區(qū)--內(nèi)核與引導(dǎo)
這個分區(qū)上有Android系統(tǒng)的引導(dǎo)程序,包括內(nèi)核和內(nèi)存操作程序。如果沒有這個分區(qū),該設(shè)備將無法啟動系統(tǒng)。恢復(fù)系統(tǒng)的時候會擦拭此分區(qū),并且必須重新安裝引導(dǎo)程序和ROM才能重啟系統(tǒng)。
2.system分區(qū)--系統(tǒng)底層
這個分區(qū)基本包含了整個安卓操作系統(tǒng),包括安卓用戶界面、和所有預(yù)裝的系統(tǒng)應(yīng)用程序。擦除這個分區(qū),會刪除整個安卓系統(tǒng)。
目標(biāo)目錄為/system
3.userdata分區(qū)--用戶數(shù)據(jù)
這個分區(qū)保存著用戶數(shù)據(jù)。通訊錄、短信、設(shè)置和你安裝的apps都在這個分區(qū)上。當(dāng)?shù)谝淮螁釉O(shè)備的時候或者在安裝了官方或者客戶的ROM之后系統(tǒng)會自動重建這個分區(qū)。當(dāng)執(zhí)行恢復(fù)出廠設(shè)置時,就是在擦除這個分區(qū)。早期的手機(jī)有單獨的data分區(qū),而現(xiàn)在data分區(qū)與手機(jī)的內(nèi)置存儲合并在一起了,所以格式化data分區(qū)就會連內(nèi)置存儲里的數(shù)據(jù)一起清除。
4.cache分區(qū)--系統(tǒng)緩存
這個分區(qū)是Android系統(tǒng)存儲頻繁訪問的數(shù)據(jù)和app的地方。擦除這個分區(qū)不影響你的個人數(shù)據(jù),當(dāng)你繼續(xù)使用設(shè)備時,被擦除的數(shù)據(jù)就會自動被創(chuàng)建。
5.misc
這個分區(qū)包含各種復(fù)雜的類似于on/off的系統(tǒng)設(shè)置。這些設(shè)置可能是USB配置和某些硬件配置信息。這是一個重要的分區(qū),如果該分區(qū)損壞或者丟失,設(shè)備的功能可能就工作不正常。
6.sdcard
這個分區(qū)不是ROM的存儲區(qū),而是SD card。這是你個人存儲文件的地方,存儲多媒體文件、文檔、資料等等。通常會備份該分區(qū)的數(shù)據(jù),如個人相冊、文檔資料等。但注意一些用戶安裝的apps會存儲數(shù)據(jù)和設(shè)置參數(shù)到SD card上,擦除這個分區(qū)會掉的這些數(shù)據(jù)。
7.recovery
recovery分區(qū)是一個可以啟動的分區(qū),里面存有我們熟悉的recovery模式,你可以啟動設(shè)備進(jìn)入recovery控制臺去執(zhí)行高級的系統(tǒng)恢復(fù)和管理操作。
8.SPL
它是second bootloader1的縮寫,該分區(qū)中放置著引導(dǎo)程序,它是在little kernel(lk)前啟動,起到引導(dǎo)lk的作用,如果將該分區(qū)擦除,則手機(jī)表現(xiàn)為進(jìn)入緊急下載模式,即,擦除該分區(qū)后,插入USB顯示QDload端口。
9.aboot
該分區(qū)放置設(shè)lk相關(guān)系統(tǒng)文件(bootloader引導(dǎo)),和Fastboot模式。lk主要是初始化相關(guān)底層硬件,起到引導(dǎo)boot的作用。在編譯時,可以利用指令 make aboot單獨編譯lk,擦出這個分區(qū)設(shè)備將無法啟動。
10.modem
主要管理手機(jī)的基帶部分。與電信網(wǎng)絡(luò)交互就是靠它了,一般往往用專用開發(fā)環(huán)境來開發(fā)。手機(jī)無線信號、藍(lán)牙、wifi等無線管理也在這里。
11.splash
該分區(qū)主要存放開機(jī)的第一幀畫面。
大家可以簡單的把手機(jī)的ROM存儲類比為我們電腦上的硬盤,這個硬盤被分成了幾個分區(qū):bootloader分區(qū),boot分區(qū),system分區(qū)等等。后面我們會逐漸介紹各個分區(qū)的用途。所謂的刷機(jī)我們可以簡單的理解成把軟件安裝在手機(jī)的某些分區(qū)中,類似于我們在電腦上安裝Windows系統(tǒng)。
? 當(dāng)按下電源鍵手機(jī)上電啟動后,首先從bootloader分區(qū)中一個固定的地址開始執(zhí)行指令,bootloader分區(qū)分成兩個部分,分別叫做primary bootloader和secondary stage bootloader。Primary bootloader主要執(zhí)行硬件檢測,確保硬件能正常工作后將secondary stage bootloader拷貝到內(nèi)存(RAM)開始執(zhí)行。Secondary stage bootloader會進(jìn)行一些硬件初始化工作,獲取內(nèi)存大小信息等,然后根據(jù)用戶的按鍵進(jìn)入到某種啟動模式。比如說大家所熟知的通過電源鍵和其它一些按鍵的組合,可以進(jìn)入到recovery,fastboot或者選擇啟動模式的啟動界面等。我們在論壇上看到的bootloader通常指的就是secondary stage bootloader。不過我們不需要關(guān)心太多的細(xì)節(jié),可以簡單的理解為bootloader就是一段啟動代碼,根據(jù)用戶按鍵有選擇的進(jìn)入某種啟動模式。
二、Android系統(tǒng)的啟動模式
1.正常啟動
當(dāng)我們只是按下電源鍵開機(jī)時,會進(jìn)入正常啟動模式。Secondary stage bootloader會從boot分區(qū)開始啟動。Boot分區(qū)的格式是固定的,首先是一個頭部,然后是Linux內(nèi)核,最后是用作根文件系統(tǒng)的ramdisk。
當(dāng)Linux內(nèi)核啟動完畢后,就開始執(zhí)行根文件系統(tǒng)中的init程序,init程序會讀取啟動腳本文件(init.rc和init.xxxx.rc) 來完成啟動。
2.Fastboot模式
fastboot是android定義的一種簡單的刷機(jī)協(xié)議,用戶可以通過fastboot命令行工具來進(jìn)行刷機(jī)。
一般是同時按住音量減和電源鍵進(jìn)入該模式。
3.Recovery模式
recovery是android定義的一個標(biāo)準(zhǔn)刷機(jī)協(xié)議。當(dāng)進(jìn)入recovery模式時,secondary stage bootloader從recovery分區(qū)開始啟動,recovery分區(qū)實際上是一個簡單的Linux系統(tǒng),當(dāng)內(nèi)核啟動完畢后,開始執(zhí)行第一個程序init(init程序是Linux系統(tǒng)所有程序的老祖宗)。init會啟動一個叫做recovery的程序(recovery模式的名稱也由此而來)。通過recovery程序,用戶可以執(zhí)行清除數(shù)據(jù),安裝刷機(jī)包等操作。一般的手機(jī)廠商都提供一個簡單的recovery刷機(jī),而大名鼎鼎的TWRP Recovery就是一個加入了很多增強(qiáng)功能的recovery,要想用上TWRP Recovery前提是recovery分區(qū)可以被刷寫。大家在論壇上看到的解鎖bootloader,通常指的就是解鎖recovery或fastboot,允許刷寫recovery分區(qū),這樣大家就可以用上喜愛的TWRP Recovery了。
4.緊急下載模式
此模式并不是固件里的,而是處理器廠商提供的,比如我們熟知的高通9008深度刷機(jī)就是如此,它是救磚最佳方法,通常都是關(guān)機(jī)之后按住音量下鍵 + 音量上鍵,再插入USB線,或者使用工程線或主板短接的方法進(jìn)入此模式。
5.FFBM模式
此模式為工廠測試模式,它也是處理器廠商提供的,它的主要作用是用于快速測試手機(jī)的一些基本功能。在開機(jī)過程中bootloader通過讀取misc分區(qū)字串如果讀取到ffbm-fy字符則進(jìn)入該模式。