Android系統Recovery工做原理之使用update.zip升級過程分析(三)---A...

Android系統Recovery工做原理之使用update.zip升級過程分析(三)---Android系統的三種啓動模式

        

        如下的篇幅開始分析咱們在上兩個篇幅中生成的update.zip包在具體更新中所通過的過程,並根據源碼分析每一部分的工做原理。app

1、       系統更新update.zip包的兩種方式源碼分析

    1.  經過上一個文檔,咱們知道了怎樣製做一個update.zip升級包用於升級系統。Android在升級系統時得到update.zip包的方式有兩種。一種是離線升級,即手動拷貝升級包到SD卡(或NAND)中,經過settings-->About phone-->System Update-->選擇從SD卡升級。另外一種是在線升級,即OTA  Install(over  the  air)。用戶經過在線下載升級包到本地,而後更新。這種方式下的update.zip包通常被下載到系統的/CACHE分區下。ui

     2.  不管將升級包放在什麼位置,在使用update.zip更新時都會重啓並進入Recovery模式,而後啓動recovery服務(/sbin/recovery)來安裝咱們的update.zip包。spa

    3.  爲此,咱們必須瞭解Recovery模式的工做原理以及Android系統重啓時怎樣進入Recovery工做模式而不是其餘模式(如正常模式)。命令行

2、       Android系統中三種啓動模式ip

       首先咱們要了解Android系統啓動後可能會進入的幾種工做模式。先看下圖:開發

                

       由上圖可知Android系統啓動後可能進入的模式有如下幾種:
文檔

       (一) MAGIC KEY(組合鍵):源碼

              即用戶在啓動後經過按下組合鍵,進入不一樣的工做模式,具體有兩種:             it

             ① camera + power:若用戶在啓動剛開始按了camera+power組合鍵則會進入bootloader模式,並可進一步進入fastboot(快速刷機模式)。

        ② home + power :若用戶在啓動剛開始按了home+power組合鍵,系統會直接進入Recovery模式。以這種方式進入Recovery模式時系統會進入一個簡單的UI(使用了minui)界面,用來提示用戶進一步操做。在tcc8800開發板中提供了一下幾種選項操做:

                                「reboot system now」

                                「apply update from sdcard」

                                「wipe data/factory reset」

                                「wipe cache partition」

       (二)正常啓動:

                 若啓動過程當中用戶沒有按下任何組合鍵,bootloader會讀取位於MISC分區的啓動控制信息塊BCB(Bootloader Control Block)。它是一個結構體,存放着啓動命令command。根據不一樣的命令,系統又 能夠進入三種不一樣的啓動模式。咱們先看一下這個結構體的定義。

             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卡中升級咱們的update.zip時會進入Recovery模式是其中一種,其餘的好比:系統崩潰,或則在命令行輸入啓動命令式也會進入Recovery或其餘的啓動模式。

        爲了解咱們的update.zip包具體是怎樣在Recovery模式中更新完成,並重啓到主系統的,咱們還要分析Android中Recovery模式的工做原理。

     

             下一篇幅開始看具體的Recovery模式工做原理,以及其在更新中的重要做用。

相關文章
相關標籤/搜索