Android zip格式的Rom具體結構是什麼,bootloader(或recovery)具體做了什麼工作將他們刷到手機?

如題。其中的內核文件在哪裡(我解壓過一些第三方rom,不是所有rom都有system.img),啟動過程是怎樣的?

我有過整套Linux(內核以及常用工具)的編譯和配置經驗。所以想知道一些底層的東西。網上都找不到這些內容。如果誰能回答就太感謝了!


先說下Android的分區吧,不說清楚這個,下面都不好講,Android一般都分這幾個區:

bootloader分區用來存儲uboot,system分區存儲Android,data分區用來存儲用戶數據,boot分區用來存儲內核文件和ramdisk,recovery分區存儲內核文件和recovery程序,其他還有misc和cache等等。當然各個公司會根據各自需求增加一些別的分區。

啟動過程是先由bootloader啟動uboot,然後uboot啟動內核,內核會根據init.rc里的指令mount system data等這些分區,mount好以後,Android就開始啟動了。

你應該注意到上面的分區里有兩個分區都存有內核文件,就是boot和recovery,boot是正常啟動流程會用到的內核文件,如果啟動過程中發現有特殊按鍵,uboot就會讀取recovery分區里的內核和ramdisk。這就是為什麼你啟動時按著某個組合鍵就會進入recovery程序。進入recovery模式以後,直接面對用戶的是跑在內核上的recovery程序。這個時候除了recovery分區以外的其他分區你想寫誰都可以了。recovery去讀取rom文件,根據文件里的內容來更新系統,如果是img文件就直接dd到分區里,如果是文件夾就把文件里的東西copy到相應分區里(好像是這樣)。更新完按正常啟動過程重啟機器就o了。

內核文件在boot.img里的,boot.img是由內核文件和ramdisk.img組成的,刷在boot分區里。你如果打開一個rom文件,如果裡面如果有boot.img,哪說明刷這個rom的時候它是要更新內核的。但一般第三方定製的rom是不會去動你的內核的,只刷system。所以你在裡面找不到內核文件。如果你找不到system.img,那裡面應該有一個叫system的文件夾吧。是img就dd到system分區,是文件夾就copy到system分區。


先說刷機包rom,一般的刷機包包括一個/meta-inf目錄和一個/system目錄,/meta-inf中包含了刷機的腳本和證書,/system中就是我們需要的rom包,有些其他的rom還有/data。至於你說的bootloader,這個相當於電腦中的bios一般刷機是不用bootloader的,用recovery刷機;recovery刷機時先檢查.zip下的簽名然後按照腳本中的代碼執行,例如:判斷機型,掛載需要刷機的分區,然後格式化,寫入待刷文件,最後卸載分區。


在META_INF文件夾下層層尋找會找到updater_script,這個文件是現有recovery進行解析,然後根據內容執行 格式化,釋放,刷入,刪除,改變屬性,執行腳本等動作。以此來完成刷機或OTA動作。


推薦閱讀:

基於安卓 6.0 的 MIUI 7 有哪些亮點?
MIUI 8 的「應用分身」、「手機分身」分別是如何實現的?
MIUI 有什麼讓你使用最不爽的地方?
為什麼MIUI 7不使用Android 5.X?
到底什麼人會認為miui比原生安卓好用?這些人用過1年以上的原生安卓嗎?

TAG:手機ROM | Android | bootloader |