posts - 189,comments - 115,trackbacks - 0

          Recovery界面的中文詳細(xì)說明

          首先,介紹下進(jìn)入Recovery的方式
          1:
          完全關(guān)機(jī),按住音量下+電源鍵開機(jī),進(jìn)入bootloader界面
          2:按音量鍵移動(dòng)光標(biāo)到Recovery那一行
          3:按電源鍵(之后機(jī)器會(huì)重啟進(jìn)入Recovery)
          音量鍵為光標(biāo)選擇鍵,可以用來移動(dòng)光標(biāo),電源鍵為確認(rèn)鍵!
          一:Recovery主界面
          *reboot system now:
          重啟手機(jī)(刷機(jī)完畢選擇此項(xiàng)就能重新啟動(dòng)系統(tǒng))
          *apply SDcard:update.zip:安裝存儲(chǔ)卡中的update.zip升級(jí)包(你可以把刷機(jī)包命名為update.zip然后用這個(gè)選項(xiàng)直接升級(jí))
          *wipe data/factory reset:清除用戶數(shù)據(jù)并恢復(fù)出廠設(shè)置(刷機(jī)前必須執(zhí)行的選項(xiàng))
          *wipe cache partition:清除系統(tǒng)緩存(刷機(jī)前執(zhí)行)(系統(tǒng)出問題也可嘗試此選項(xiàng),一般能夠解決)
          *install zip from SDcard:從SDcard上安裝zip升級(jí)包(可以執(zhí)行任意名稱的zip升級(jí)包,不限制升級(jí)包名稱)
          *backup and restore:備份和還原系統(tǒng)(作用和原理如同電腦上的chost一鍵備份和還原)
          *mounts and storage:掛載和存儲(chǔ)選項(xiàng)(詳細(xì)功能見下面的解釋)
          *advanced:高級(jí)設(shè)置
          二:backup and restore功能詳解
          *Backup:
          備份當(dāng)前系統(tǒng)
          *Restore:還原上一個(gè)系統(tǒng)
          *Advanced Restore:高級(jí)還原選項(xiàng)(用戶可以自選之前備份的系統(tǒng),然后進(jìn)行恢復(fù))
          三:mounts and storage功能詳解
          *mount  /system:
          掛載system文件夾(基本用不到)
          *mount  /data:掛載data文件夾(基本用不到)
          *unmount  /cache:取消cache文件夾掛載(基本用不到)
          *unmount  /sdcard:取消內(nèi)存卡掛載(基本用不到)
          *mount  /sd-ext:掛載內(nèi)存卡Ext分區(qū)(基本用不到)
          *format  boot:格式化boot(刷機(jī)前最好執(zhí)行一下)
          *format  system:格式化system(刷機(jī)前最好執(zhí)行一下)
          *format  data:格式化data(刷機(jī)前最好執(zhí)行一下)
          *format  cache:格式化cache(刷機(jī)前最好執(zhí)行一下)
          *format  sdcard:格式化內(nèi)儲(chǔ)卡(執(zhí)行此項(xiàng)你會(huì)后悔的)
          *format  sd-ext:格式化內(nèi)存卡Ext分區(qū)(執(zhí)行此項(xiàng)你會(huì)后悔的)
          *mount USB storage:開啟Recovery模式下的USB大容量存儲(chǔ)功能(也就是說可以在Recovery下對(duì)內(nèi)存卡進(jìn)行讀寫操作)
          四:Advance 功能詳解
          *Reboot  Recovery:
          重啟Recovery(重啟手機(jī)并再次進(jìn)入Recovery) 
          *Wipe  Dalvik  Cache:清空虛擬機(jī)緩存(可以解決一些程序FC的問題)  
          *Wipe  Battery  Stats:
          清空電池調(diào)試記錄數(shù)據(jù)(刷機(jī)前做下這個(gè),會(huì)比較好,感覺自己電量有問題的機(jī)油也可以試試)
          *Report  Error:錯(cuò)誤報(bào)告(配合固件管家用的,不是開發(fā)者請(qǐng)無視)
          *Key  Test:按鍵測(cè)試(基本沒撒用的功能?。?br /> *Partition  SD  Card:對(duì)內(nèi)存卡分區(qū)(個(gè)人覺得DHD不需要分區(qū),一來耗電、二來影響速度?。?br /> *Fix  Permissions:修復(fù)Root權(quán)限(如果你的手機(jī)Root權(quán)限出問題了,可以用這個(gè)功能)

          [資料] ◆Android系統(tǒng)名詞解釋,詳解recovery模式下各種指令◆



          APK:

                  APK 是Android Package 的縮寫,即Android安裝包。APK 相當(dāng)于電腦上的exe文件或者塞班上的sis文件。

          ROM、RUU:

                       ROM,是用來刷你手機(jī)系統(tǒng)的數(shù)據(jù)文件,也就是Android 系統(tǒng)的封裝包,通過手機(jī)的工程模式解壓安裝到手機(jī)中形成你手機(jī)的操作系統(tǒng)。
                                                             簡(jiǎn)單來說就是手機(jī)固件,相當(dāng)于電腦的系統(tǒng),我們刷機(jī)也就是重新安裝這部分。
                 官方原版ROM 就是RUU,(相當(dāng)于原版Windows XP)首先他是一個(gè)最安全的升級(jí)工具,可以讓我們安全的升級(jí)ROM (一定要對(duì)應(yīng)的機(jī)型)。
                 當(dāng)我們?cè)谒C(jī)過程中由于不當(dāng)?shù)牟僮骰虬姹具x擇的錯(cuò)誤,導(dǎo)致無法啟動(dòng),可以使用官方的RUU 程序來恢復(fù)系統(tǒng),等于說,這是一個(gè)救命道具。

          Radio:

                       Radio指代的是通訊模塊,就是手機(jī)里面負(fù)責(zé)信號(hào)部分的模塊,PDA類型的手機(jī),基本都強(qiáng)調(diào)這么個(gè)概念。一個(gè)是PDA,一個(gè)是手機(jī)(貌似是句廢話- -),舉個(gè)很簡(jiǎn)單的例子,以三星的PPC手機(jī)為例,比如i718.比如i908,他們?cè)谒C(jī)的時(shí)候(所謂刷機(jī)就是重裝系統(tǒng))一般都是分兩部分,第一部分刷 手機(jī)部分,第二部分刷PDA部分,而且兩部分基本不相干。

          app2sd:

                       Google 手機(jī)的軟件為了安全性和穩(wěn)定性都是默認(rèn)安裝到手機(jī)內(nèi)存里,但是手機(jī)內(nèi)存有限,所以我們會(huì)做app2sd 操作,來讓我們安裝的軟件放到sd卡上,而Google 的android 系統(tǒng)是基于Linux 的,所以存儲(chǔ)卡上本身的Fat 格式是不會(huì)被識(shí)別的,所以我們要分區(qū)(第二分區(qū))出來,格式成Linux 認(rèn)識(shí)的ext2 或3 或4 格式,在用鏈接命令,把這個(gè)分區(qū)映射成一個(gè)系統(tǒng)文件夾system/sd(大概這個(gè)意思),把所有的軟件裝到這個(gè)“文件夾”下,這就是app2sd 的操作。需要ROM 支持并開啟app2sd 功能。
                        app2sd 的操作其實(shí)是犧牲了一部分軟件的速度和穩(wěn)定性來?yè)Q取更多的手機(jī)內(nèi)存安裝更多的軟件。另外,app2sd只是把軟件放到了sd卡上,運(yùn)行軟件還是需要占用手 機(jī)的內(nèi)存的,所以,你裝了軟件之后,一般手機(jī)內(nèi)存還是會(huì)減少一些。你如果安裝的軟件在70個(gè)以內(nèi),個(gè)人覺得沒有必要,呵呵,如果很多游戲軟件除外。此外, 使用app2sd 最大的好處就是,刷一個(gè)帶app2sd 的rom 之后,以后升級(jí)這個(gè)rom(依然帶app2sd)的時(shí)候,你的軟件都會(huì)完整保存(個(gè)別除外,比如htc input chinese需要重新添加幾個(gè)文件到system/lib下),不過很多ROM 是需要Wipe ext 分區(qū)的,也就不能保留了。
                        目前來看我們現(xiàn)在所使用的Android 各種軟件暫時(shí)還沒有進(jìn)行app2sd 的必要。
                 簡(jiǎn)單來說就是把程序安裝到內(nèi)存卡里面
          注:為了適應(yīng)用戶需求,從android 2.2開始 android系統(tǒng)已經(jīng)支持安裝軟件到sd卡。

          root:

                        root 就是你手機(jī)的boss,它可以訪問和修改你手機(jī)幾乎所有的文件,這些東西可能是制作手機(jī)的人不愿意你修改和觸碰的東西,因?yàn)樗麄冇锌赡苡绊懙绞謾C(jī)的穩(wěn)定,還容易被一些hacker 有機(jī)會(huì)入侵你的手機(jī)(貌似還沒有出來這類黑客)。
                        既然root 這么危險(xiǎn),我們?yōu)槭裁催€要去獲取它?其實(shí)用root 的權(quán)限主要是因?yàn)槲覀兩谔斐?,我們很多東西是受限制的,我們只能利用這些權(quán)限來做我們被限制的去做的事情,比如Google 禁止我們看到市場(chǎng)里很多免費(fèi)或付費(fèi)軟件,我們可以用marketenabler 來進(jìn)去看;再比如國(guó)慶以來GFW 把我們的市場(chǎng)干掉了,很多朋友只能看不能下,不能綁定gmail,我們可以修改hosts 來搞定他們,但這些都需要root權(quán)限。
                        比如目前所有在hero 上截屏的軟件都需要root 權(quán)限,沒有root 權(quán)限,像Drocap、Shootme、Picme等等這類截屏軟件就不能使用(當(dāng)然,我們可以連線電腦,使用 91助手在電腦上截取自己想要的hero 屏圖)。個(gè)人覺得,除非必要,不要總是去想著獲取root。
                  ROOT就是手機(jī)的最高權(quán)限,相當(dāng)于塞班的XX權(quán)限,可以對(duì)系統(tǒng)文件進(jìn)行操作。

          SPL:

                          SPL全稱“Secondary Program Loader”,中文名叫做二次程序載入器,負(fù)責(zé)檢測(cè)ROM和硬件,尋找系統(tǒng)啟動(dòng)分區(qū)并裝載ROM的其它部分。
                    簡(jiǎn)單來說,就是俗稱的刷機(jī)安全套件,保證您在刷機(jī)失敗時(shí)也不會(huì)變磚頭,通??煞譃?#8220;Hard-SPL”和“Soft-SPL”兩種。XX手機(jī)也就是XX的這個(gè)部分。

          recovery:

                        recovery 就是你用 home 鍵+開機(jī)鍵 開機(jī)后能進(jìn)入的一個(gè)界面(工程模式),在這個(gè)界面你可以直接用sd 卡上的zip 的rom 升級(jí)或者備份你的系統(tǒng),老版本的recovery 只有三個(gè)選項(xiàng),無法備份系統(tǒng),只能用update.zip這個(gè)文件名的文件升級(jí),不能用任何文件名的zip文件升級(jí)。新版本已經(jīng)多出很多選項(xiàng)可以供你操 作。
                         此外,一般刷rom 之前最好wipe一下(wipe只是抹除rom 以外的個(gè)人數(shù)據(jù),不會(huì)影響rom 本身),也就是返回出廠設(shè)置一下比較好,但是這樣就會(huì)丟失你的所有軟件,短信彩信,聯(lián)系人(備份在google上沒有關(guān)系)和設(shè)置等等,備份或者不 wipe 都可以。
          目前最新版為:RA-hero-v1.6.2
          說說RA-hero-v1.6.2里的對(duì)應(yīng)的說明:
          1、Reboot system now——重啟
          2、USB-MS toggle——在recovery 模式下直接連接USB而不需要退出該模式
          3、Backup/Restore——備份和還原
                      3-1、Nand backup——Nand 備份
                      3-2、Nand + ext backup——Nand 備份(系統(tǒng)和ext 分區(qū)一同備份)
                      3-3、Nand restore——還原(就是還原3-1、3-2 的最后一次備份)
                      3-4、BART backup——BART 備份 (包括系統(tǒng)和ext 分區(qū))
                      3-5、BART restore——還原最后一次的BART備份
                      Nand 備份類似于系統(tǒng)的備份 而BART 則像是PC 上ghost 的備份。
                      Nand 備份 它不會(huì)備份ext 分區(qū)(就是第二分區(qū) 沒有分區(qū)的可以不管這個(gè))
                      所以你的如果app2sd 了 那么裝在第二分區(qū)的程序用Nand 恢復(fù)是辦不到的
                      BAR T則可以備份到ext 分區(qū) 用BART 恢復(fù)則可以恢復(fù)整個(gè)系統(tǒng) 可以使它和你備份前一模一樣,
                 不會(huì)有一點(diǎn)文件信息的丟失(包括聯(lián)系人、短信、圖片、影音等,所以如果你裝的東西比較多,那么備份和恢復(fù)會(huì)比較慢)
          4、Flash zip from sdcard——從sd卡根目錄的.zip ROM 刷機(jī)包刷機(jī)
          5、Wipe——清除
                      5-1、Wipe data/factory reset——清除內(nèi)存數(shù)據(jù)和緩存數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
                      5-2、Wipe Dalvik-cache——清除緩存數(shù)據(jù) + ext 分區(qū)內(nèi)數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
                      5-3、Wipe SD:ext partition——只清除ext 分區(qū)內(nèi)數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
                      5-4、Wipe battery stats——清除電池?cái)?shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
                      5-5、Wipe rotate settings——清除傳感器內(nèi)設(shè)置的數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
          6、Partition sdcard——分區(qū)sd 卡
                      6-1、Partition SD——自動(dòng)為sd 卡分區(qū)
                      6-2、Repair SD:ext——修復(fù)ext 分區(qū)
                      6-3、SD:ext2 to ext3——將ext2 分區(qū)轉(zhuǎn)換為ext3 分區(qū)(推薦)
                      6-4、SD:ext3 to ext4——將ext3 分區(qū)轉(zhuǎn)換為ext4 分區(qū)(C4 卡不推薦,C6 卡推薦)
          7、Other——其它
                      7-1、Fix apk uid mismatches——修復(fù)apk 程序
                      7-2、Move apps+dalv to SD——移動(dòng)程序和虛擬緩存到sd 卡(這個(gè)可不是 app2sd)
                      7-3、Move recovery.log to SD——移動(dòng)刷機(jī)日志文件到sd 卡
                                                                    (執(zhí)行此操作后,sd 卡根目錄會(huì)出現(xiàn)一個(gè)“recovery.log” 文件 即為刷機(jī)日志文件)

          8、Power off——關(guān)機(jī)

          fastboot:

          從字面上來看是【快速啟動(dòng)】的意思,也算是一個(gè)刷機(jī)界面,不過比recovery更加底層.這個(gè)底層是更加接近硬件層的意思.
          兩個(gè)都很重要,不過fastboot更為主要.當(dāng)你不能進(jìn)入recovery的時(shí)候,不要緊張,你還能進(jìn)fastboot挽救,不過當(dāng)你連fastboot都不能進(jìn)入的時(shí)候,那可真就是磚了.
          通俗的說 recovery就好比外套,fastboot就好比內(nèi)褲.當(dāng)你的外套沒了的時(shí)候,你還有內(nèi)褲,這個(gè)時(shí)候頂多被人說成是臭流氓.不過當(dāng)你內(nèi)褲都沒了的時(shí)候,那可就是耍流氓了,到時(shí)會(huì)有警察叔叔請(qǐng)你喝茶的.
          為了使用Fastboot功能.您必須root您的設(shè)備.并獲得S-OFF的SPL.你的電腦還必須裝有ADB驅(qū)動(dòng).
          進(jìn)入Fastboot的方式是關(guān)機(jī)狀態(tài)下按返回+開機(jī).

          Fastboot使用方式: fastboot [ <選項(xiàng)> ] <命令>
          解釋:
          []括起來表示這個(gè)是可選的.
          <>括起來表示這個(gè)是必須的.

          可用命令:
          update <文件名>                        從官方update.zip升級(jí)系統(tǒng).該update.zip必須是官方的
          flashall                                 'flash boot' + 'flash system'
          flash <分區(qū)名> [ <文件名> ]         將文件寫入分區(qū).文件必須正確的格式.分區(qū)名有但不限于system,recovery,boot,splash1,hboot,radio,userdata,cache
          erase <分區(qū)名>                        清空一個(gè)分區(qū).
          getvar <參數(shù)名>                        顯示一個(gè)啟動(dòng)參數(shù)
          boot <內(nèi)核文件> [ <ramdisk文件> ]           將電腦上的內(nèi)核下載到手機(jī)并用該內(nèi)核啟動(dòng)系統(tǒng).
          flash:raw boot <內(nèi)核文件> [ <ramdisk文件> ]    創(chuàng)建boot.img并下載到手機(jī)啟動(dòng)系統(tǒng).
          devices                                  列出所有與電腦連接的設(shè)備.
          reboot                                   正常啟動(dòng)系統(tǒng)
          reboot-bootloader                        啟動(dòng)系統(tǒng)到hboot

          選項(xiàng):
          -w                                       清空用戶數(shù)據(jù)分區(qū)和緩存分區(qū).相當(dāng)于recvery中的"wipe data/factory reset"
          -s <串口號(hào)>                       置頂要操作的設(shè)備的串口號(hào)
          -p <產(chǎn)品名>                             指定要操作的設(shè)備的產(chǎn)品名.比如hero,bravo,dream...
          -c <命令行>                        用命令行替換系統(tǒng)的啟動(dòng)命令行.

          分區(qū)解釋:
          system:系統(tǒng)分區(qū).我們刷機(jī)器一般就是刷的這個(gè)分區(qū).
          userdata:數(shù)據(jù)分區(qū).
          cache:緩存分區(qū)
          recovery:Recovery分區(qū).
          boot:存放內(nèi)核和ramdisk的分區(qū).
          hboot:這個(gè)是SPL所在的分區(qū).很重要哦.也是fastboot所在的分區(qū).刷錯(cuò)就真的變磚了.
          splash1:這個(gè)就是開機(jī)第一屏幕了.
          radio:這個(gè)是無線所在的分區(qū).
          misc:其他分區(qū).放的是htc的一些東西.]


          http://leox.iteye.com/blog/975303

          http://blogold.chinaunix.net/u/14459/showart_1911144.html

           

          (muddogxp 原創(chuàng),轉(zhuǎn)載請(qǐng)注明)

          Recovery簡(jiǎn)介

          Android利用Recovery模式,進(jìn)行恢復(fù)出廠設(shè)置,OTA升級(jí),patch升級(jí)及firmware升級(jí)。

          升級(jí)一般通過運(yùn)行升級(jí)包中的META-INF/com/google/android/update-script腳本來執(zhí)行自定義升級(jí),腳本中是一組recovery系統(tǒng)能識(shí)別的UI控制,文件系統(tǒng)操作命令,例如write_raw_image(寫FLASH分區(qū)),copy_dir(復(fù)制目錄)。該包一般被下載至SDCARDCACHE分區(qū)下。如果對(duì)該包內(nèi)容感興趣,可以從http://forum.xda-developers.com/showthread.php?t=442480下載JF升級(jí)包來看看。

          升級(jí)中還涉及到包的數(shù)字簽名,簽名方式和普通JAR文件簽名差不錯(cuò)。公鑰會(huì)被硬編譯入recovery,編譯時(shí)生成在:out/target/product/XX/obj/PACKAGING/ota_keys_inc_intermediates/keys.inc

          G1中的三種啟動(dòng)模式

          MAGIC KEY:

          • camera + powerbootloader模式,ADP里則可以使用fastboot模式

          • home + powerrecovery模式

          • 正常啟動(dòng)

          Bootloader正常啟動(dòng),又有三種方式,按照BCBBootloader Control Block, 下節(jié)介紹)中的command分類:

          • command == 'boot-recovery' → 啟動(dòng)recovery.img。recovery模式

          • command == 'update-radio/hboot' → 更新firmwarebootloader)

          • 其他 → 啟動(dòng)boot.img

          Recovery涉及到的其他系統(tǒng)及文件

          • CACHE分區(qū)文件

          •  
            • /cache/recovery/command: recovery命令,由主系統(tǒng)寫入。所有命令如下:

              • --send_intent=anystring - write the text out to recovery.intent

              • --update_package=root:path - verify install an OTA package file

              • --wipe_data - erase user data (and cache), then reboot

              • --wipe_cache - wipe cache (but not user data), then reboot

            • /cache/recovery/logrecovery過程日志,由主系統(tǒng)讀出

            • /cache/recovery/intentrecovery輸出的intent

          • Recovery 工具通過NAND cache分區(qū)上的三個(gè)文件和主系統(tǒng)打交道。主系統(tǒng)(包括恢復(fù)出廠設(shè)置和OTA升級(jí))可以寫入recovery所需的命令,讀出recovery過程中的LOGintent

          • MISC分區(qū)內(nèi)容

            Bootloader Control Block (BCB) 存放recovery bootloader message。結(jié)構(gòu)如下:

            struct bootloader_message {

              char command[32];

              char status[32]; // 未知用途

              char recovery[1024];

            };

            • command可以有以下兩個(gè)值

              boot-recovery”:標(biāo)示recovery正在進(jìn)行,或指示bootloader應(yīng)該進(jìn)入recovery mode

              update-hboot/radio”:指示bootloader更新firmware

            • recovery內(nèi)容

              recovery\n

              <recovery command>\n

              <recovery command>

              其中recovery commandCACHE:/recovery/command命令


          兩種Recovery Case

          • FACTORY RESET(恢復(fù)出廠設(shè)置)

          1. 用戶選擇“恢復(fù)出廠設(shè)置”

          2. 設(shè)置系統(tǒng)將"--wipe_data"命令寫入/cache/recovery/command

          3. 系統(tǒng)重啟,并進(jìn)入recover模式(/sbin/recovery

          4. get_args() 將 "boot-recovery""--wipe_data"寫入BCB

          5. erase_root() 格式化(擦除)DATA分區(qū)

          6. erase_root() 格式化(擦除)CACHE分區(qū)

          7. finish_recovery() 擦除BCB

          8. 重啟系統(tǒng)

           

          • OTA INSTALLOTA升級(jí))

          1. 升級(jí)系統(tǒng)下載 OTA包到/cache/some-filename.zip

          2. 升級(jí)系統(tǒng)寫入recovery命令"--update_package=CACHE:some-filename.zip"

          3. 重啟,并進(jìn)入recovery模式

          4. get_args() "boot-recovery" 和 "--update_package=..." 寫入BCB

          5. install_package() 作升級(jí)

          6. finish_recovery() 擦除 BCB

          7. ** 如果安裝包失敗 ** prompt_and_wait() 等待用戶操作,選擇ALT+SALT+W 升級(jí)或恢復(fù)出廠設(shè)置

          8. main() 調(diào)用 maybe_install_firmware_update()

            1. 如果包里有hboot/radiofirmware則繼續(xù),否則返回

            2. 將 "boot-recovery" 和 "--wipe_cache" 寫入BCB

            3. 將 firmware image寫入cache分區(qū)

            4. 將 "update-radio/hboot" 和 "--wipe_cache" 寫入BCB

            5. 重啟系統(tǒng)

            6. bootloader自身更新firmware

            7. bootloader 將 "boot-recovery" 寫入BCB

            8. erase_root() 擦除CACHE分區(qū)

            9. 清除 BCB

          9. main() 調(diào)用 reboot() 重啟系統(tǒng)


          Recovery模式流程


          /init  init.rc  /sbin/recovery 

          main():recovery.c


          • ui_init():ui.c UI initialize

            • gr_init():minui/graphics.c set tty0 to graphic mode, open fb0]

            • ev_init():minui/events.c [open /dev/input/event*]

            • res_create_surface:minui/resource.c [create surfaces for all bitmaps used later, include icons, bmps]

            • create 2 threads: progress/input_thread [create progress show and input event handler thread]

          • get_args():recovery.c

            • get_bootloader_message():bootloader.c [read mtdblock0(misc partition) 2nd page for commandline]

            • check if nand misc partition has boot message. If yes, fill argc/argv.

            • If no, get arguments from /cache/recovery/command, and fill argc/argv.

            • set_bootloader_message():bootloader.c [set bootloader message back to mtdblock0]

          • Parser argv[] filled above

          • register_update_commands():commands.c [ register all commands with name and hook function ]

            • registerCommand():commands.c

              • Register command with name, hook, type, cookie.

              • Commands, e.g: assert, delete, copy_dir, symlink, write_raw_image.

            • registerFunction():commands.c

              • Register function with name, hook, cookie.

              • Function, e.g: get_mark, matches, getprop, file_contains

          • install_package():

            • translate_root_path():roots.c [ "SYSTEM:lib" and turns it into a string like "/system/lib", translate the updater.zip path ]

            • mzOpenZipArchive():zip.c [ open updater.zip file (uncompass) ]

            • handle_update_package():install.c

              • verify_jar_signature():verifier.c [ verify signature with keys.inc key; verify manifest and zip package archive ]

                • verifySignature() [ verify the signature file: CERT.sf/rsa. ]

                  • digestEntry():verifier.c [ get SHA-1 digest of CERT.sf file ]

                  • RSA_verify(public key:keys.inc, signature:CERT.rsa, CERT.sf's digest):libc/rsa.c [ Verify a 2048 bit RSA PKCS1.5 signature against an expected SHA-1 hash. Use public key to decrypt the CERT.rsa to get original SHA digest, then compare to digest of CERT.sf ]

                • verifyManifest() [ Get manifest SHA1-Digest from CERT.sf. Then do digest to MANIFEST.MF. Compare them ]

                • verifyArchive() [ verify all the files in update.zip with digest listed in MANIFEST.MF ]

              • find_update_script():install.c [ find META-INF/com/google/android/update-script updater script ]

              • handle_update_script():install.c [ read cmds from script file, and do parser, exec ]

                • parseAmendScript():amend.c [ call yyparse() to parse to command ]

                • exeCommandList():install.c

                  • exeCommand():execute.c [ call command hook function ]

          • erase DATA/CACHE partition

          • prompt_and_wait():recovery.c [ wait for user input: 1) reboot 2) update.zip 3) wipe data ]

            • ui_key_xxx get ALT+x keys

            • 1) do nothing

            • 2) install_package('SDCARD:update.zip')

            • 3) erase_root()  format_root_device() DATA/CACHE

          • may_install_firmware_update():firmware.c [ remember_firmware_update() is called by write_hboot/radio_image command, it stores the bootloader image to CACHE partition, and write update-hboot/radio command to MISC partition for bootloader message to let bootloader update itself after reboot ]

            • set_bootloader_message()

            • write_update_for_bootloader():bootloader.c [ write firmware image into CACHE partition with update_header, busyimage and failimage ]

          • finish_recovery():recovery.c [ clear the recovery command and prepare to boot a (hopefully working) system, copy our log file to cache as well (for the system to read), and record any intent we were asked to communicate back to the system. ]

          • reboot()


          Recovery模式流程圖

          以下流程圖繪制了系統(tǒng)從啟動(dòng)加載bootloader后的行為流程。

          沒有床,見blog吧~

           

          實(shí)際使用的例子:

          adb shell "echo \"send_intent=xxx\" > /cache/recovery/command"

          adb shell "echo \"--update_package=SDCARD:update.zip\" >> /cache/recovery/command"

          adb shell sync

          adb reboot recovery

           

          posted on 2011-08-16 10:00 MEYE 閱讀(3525) 評(píng)論(0)  編輯  收藏 所屬分類: Android3D
          主站蜘蛛池模板: 中宁县| 阿克陶县| 南陵县| 顺昌县| 河津市| 和硕县| 砀山县| 沅陵县| 灵石县| 石台县| 安宁市| 怀柔区| 河曲县| 东宁县| 宁津县| 铜鼓县| 辽宁省| 凌云县| 海南省| 宣恩县| 滕州市| 舒兰市| 桃园市| 晴隆县| 全椒县| 沙河市| 岳池县| 扶余县| 崇信县| 宾阳县| 徐汇区| 雅江县| 承德县| 枣庄市| 仲巴县| 舟曲县| 宝清县| 金门县| 潍坊市| 商丘市| 莱芜市|