1. 程式人生 > >Android ROM分析(1):刷機原理及方法

Android ROM分析(1):刷機原理及方法

一、刷機原理

android系統啟動的時候,首先會進行一些諸如硬體自檢之類的操作,這些操作完成以後(至少它應該知道當前的機器有沒有電),會檢查一下當前手機按鍵的狀態(接下來就是所謂刷機模式切換了,不同的android手機有不同的按鍵組合用來進入刷機模式),如果此時按鍵狀態處於刷機組合,那麼系統會呼叫ROM裡面的一個叫做recovery的程式(這時就是進入了所謂的刷機程式了,它只是一個工具性質程式,用於檢查刷機包的完整性和數字簽名的合法性。對於目前大多數root過的機器而言,數字簽名的合法性都不會成問題,然後由recovery程式將刷機包進行解壓,然後把刷機包裡面的檔案寫入到ROM中去,以此完成刷機過程);如果此時按鍵沒有標明是刷機模式,那麼系統會建立記憶體盤,開始從ROM裡面載入相應的檔案系統,並把相關的檔案拷貝到記憶體盤中,進而引導linux啟動,然後是啟動虛擬機器dalvik,然後就是建立工作程序載入和執行framework,然後就會看到待機的畫面。當然在這個過程中還發生了許多事情,啟動了許多服務等等。

現在來總結一下,實際上刷機包就是一個ROM檔案的壓縮包,進入刷機模式後,recovery程式會把刷機包裡面的檔案寫入ROM儲存區替換ROM儲存區的原有檔案;當下次啟動手機的時候,會從ROM中載入剛剛替換過的檔案,並利用這些檔案來啟動和執行系統。這就是刷機包的全部功能和作用,刷機的本質就是檔案的覆蓋和替換操作。

刷機方法

(1) recovery方法,就是我們平時將update.zip儲存在SD卡,按X+電源鍵開機,這種方法是呼叫了recovery的方法將各種img或檔案進行復制等操作。關於recovery的工作原理,另文再講。
(2) fastboot方法,這個方法其實是比較酷的方法,說白點,fastboot就是將已有的各分割槽映象檔案(img檔案,意義上類似我們對光碟做的映象檔案)直接覆蓋寫到指定分割槽中,有點類似我們平時作業系統的Ghost還原。
這兩種方法哪種更好,這就不好比高低了,總的來說:
Recovery方法更簡單,只需要傻瓜式的將update.zip放到SD卡的要目錄下,然後進入Recovery模式alt-s就可以了,但和任何傻瓜式東西一樣,他的靈活度就很小了,而且出錯了也都不知道如何解決。一般來說做Rom的高手為了保證Rom的可靠性,在安裝程式中都會對一些安裝環境進行一些確定,而各位的手機環境又是千變萬化的,Rom高手也很難考慮周全,另外,Recovery程式本身也有一些環境驗證。
fastboot方法更靈活,功能也更強大,fastboot方法不需要依賴於recovery,甚至linux底層刷壞了recovery模式都進不了的情況下也可以通過fastboot方工刷回來。fastboot模式其實是呼叫spl進行刷機的,所以如果刷spl壞了,fastboot模式應該也進不了,也就是磚了。fastboot方法需要各位電腦上有fastboot程式,同時手機要進入fastboot模式才可以操作,關於這些知識,請參見Google *^_^*


三、Android系統中的各分割槽(可能分割槽這個說法不太準確)
(1) hboot(我們刷的SPL就是這玩意),這個分割槽是最基本的引導分割槽(類似電腦中的BIOS),這個區壞了,差不多就變磚了,所以我們刷SPL時才要如此小心啊。
(2) boot,這個分割槽應該是linux作業系統的引導分割槽。
(3) radio,這個分割槽是手機的一些底層裝置相關的驅動或功能程式吧,如打電話和發簡訊等,不同的系統版本會有不同的radio配套,我們平時刷了高版本的ROM後,如果不刷高版本的Radio就有可能導致打電話不正常之類的。
(4) recovery,這個分割槽裝的就是前面提到的recovery程式了,這個刷不同的recovery版本可以帶來不同的功能,但一般來說,刷recovery最主要的就是提Root許可權。
(5) system,是一般釋出的ROM的主要功能程式分割槽了,我們說的ROM功能和自帶程式的定製應該就是基於這個分割槽的修改和編譯了。
(6) userdata,使用者資料,不說了。
(7) cache,快取,一般是用來OTA升級時的快取,我們說刷SPL可以增加程式區的空間大小就是主要將這個區的大小縮水瞭然後加大了程式區的分割槽大小。