1. 程式人生 > >(三)android升級--系統升級方法和啟動模式

(三)android升級--系統升級方法和啟動模式

1、系統更新的兩種方法

(1)從文件一我們知道了怎麼去製作android升級所需要的升級包,當然升級包做好後,我們怎麼去拿到這個升級包,這裡有兩種方法能拿到。第一,就是通過離線升級,也就是把製作好的升級包放到TF卡或SD卡中,然後選擇它即可;第二,就是通過線上升級,也就是我們所說的OTA升級,通過從伺服器線上下載升級包到本地,然後更新,這種方式下載的升級包一般會放在我們的cache分割槽。

(2)選擇升級包後,android系統都會重啟並進入recovery模式,然後通過init.rc指令碼檔案啟動recovery(/sbin/recovery)服務來更新我們的系統

(3)所以這裡我們必須瞭解recovery的工作原理,也就是說在選擇升級包後,系統是怎麼進入到recovery工作模式的

2、android系統的啟動模式

(1)android系統啟動模式流程圖如下圖所示:


(2)幾種模式介紹

1、magic key

按下開發板快速刷機鍵,不同開發板的操作有點差別,在我們按下我們板子的快速刷機建後,系統會進入到recovery模式,這時會呈現出一個簡單的UI,來提示使用者要進行什麼操作。比如: “reboot system now”,“wipe data/factory reset”等操作。

2、正常啟動

若啟動過程中使用者沒有按下任何按鍵,bootloader會先讀取MISC分割槽中的啟動資訊控制塊BCB,它是一個存放著command命令的結構體,要是不存放這麼一個分割槽的話,系統會去讀取臨時創建出來的command檔案中的命令,根據不同的命令,系統可以響應不同的操作。下面是BCB控制快重要的結構體:

           struct bootloader_message{

                      char command[32];    //存放不同的啟動命令

                      char status[32];          //update-radio或update-hboot完成存放執行結果

                      char recovery[1024];  //存放/cache/recovery/command中的命令

             };

這裡我們先看command可能的值,其他的後文再具體分析。command可能的值有兩種,值為空(即沒有命令),值為以下值:


①command=="boot-recovery"時,系統會進入recovery模式。recovery服務會具體根據/cache/recovery/command中的命令執行相應的操作(例如,升級update.zip或擦除cache,data等)。

②command=="update-radia"或"update-hboot"時,系統會進入更新firmware(更新bootloader),具體由bootloader完成。

③command為空時,即沒有任何命令,系統會進入正常的啟動,最後進入主系統(main system)。這種是最通常的啟動流程。

Android系統不同的啟動模式是在不同的情形下觸發的,我們從SD卡中升級我們的升級包時會進入recovery模式是其中一種,其他的比如:系統崩潰,掉電,或則在命令列輸入啟動命令也會進入recovery模式或其他的啟動模式。

為了解我們的升級包具體是怎樣在recovery模式中更新完成,並重啟到正常系統的,我們還要分析Android中recovery模式的工作原理。