posts - 189,comments - 115,trackbacks - 0
          Android Recoveryの流程分析
          http://blog.csdn.net/xujianqun/article/details/6652531

          關(guān)于recovery的代碼分析,見另一篇

          Android Recoveryの代碼分析


          做個(gè)升級(jí)程序,支持SD卡、U盤、Flash三種路徑升級(jí)


          該升級(jí)應(yīng)用程序要和/recovery/sbin/下的recovery配套使用,

          固件共有boot.img,recovery.img,system.img,

          其中system.img是空的,system.img打包格式要和recovery.img匹配


          使用此程序:

          先把librecovery.so是添加到rootfs文件系統(tǒng)庫(kù)中,

          再把應(yīng)用程序recovery_sample添加到某目錄下,

          然后執(zhí)行recovery_sample就可以實(shí)現(xiàn)update功能


          文檔包括四部分:

          l update庫(kù)和應(yīng)用文件

          l update使用及命令

          l 輸入命令格式例子

          l update/recovery界面


          1、Update庫(kù)和應(yīng)用文件

          文件一:Recovery

          是存在于/gingerbread/bootable/,用于生成recovery可執(zhí)行文件,生成完將其拷貝到UpdateRecoveryfs/recoveryfs/sbin/目錄下

          文件二:UpdateLibSample

          用于生成update應(yīng)用的庫(kù)文件librecovery.so和可執(zhí)行文件recovery_sample

          文件三:UpdateRecoveryfs

          用于生成recovery.img,有ramdisk和cramfs兩種格式

          文件四:UpdateRootfs

          用于生成boot.img,有ramdisk和cramfs兩種格式


          ramdisk 格式:
          ./mkbootfs recoveryfs | ./minigzip > ramdisk-recovery.img && \

          ./mkkrnlimg ramdisk-recovery.img recovery.img

          rm ramdisk-recovery.img


          Cramfs 格式:
          ./mkfs.cramfs -n v1.01 recoveryfs recovery.img


          Boot.img和recovery.img打包格式要一致,統(tǒng)一為ramdisk或者cramfs

          流程圖




          兩種打包格式

          ramdisk格式:

          ./mkbootfs recoveryfs | ./minigzip > ramdisk-recovery.img && \

          ./mkkrnlimg ramdisk-recovery.img recovery.img

          rm ramdisk-recovery.img

          Cramfs格式:

          ./mkfs.cramfs -n v1.01 recoveryfs recovery.img


          2、update使用及命令

          輸入 ./recovery_sample可以查看幫助

          ==============================================================

          快捷方式  等效命令

          2 --wipe_cache格式化cache

          3 --wipe_userdata格式化用戶數(shù)據(jù)

          4 --wipe_udisk格式化U盤數(shù)據(jù)

          6 --recover_image=BACKUP:update.img恢復(fù)出廠設(shè)置,從backup還原所有固件

          7 --update_image=SDCARD:update.img默認(rèn)路徑,從SD卡根目錄下固件update.img升級(jí)

          9 --update_kernel單獨(dú)升級(jí)kernel,從SD卡update.img中取得kernel固件

          10 --update_boot單獨(dú)升級(jí)boot,從SD卡update.img中取得boot固件

          11 --update_system單獨(dú)升級(jí)system,從SD卡update.img中取得system固件

          12 --update_recovery單獨(dú)升級(jí)recovery,從SD卡update.img中取得recovery固件

          13 --update_backup單獨(dú)升級(jí)backup分區(qū),拷貝SD卡的update.img到backup

          14 --update_parameter單獨(dú)升級(jí)parameter,從SD卡update.img中取得parameter

          15 --update_loader單獨(dú)升級(jí)loader,從SD卡update.img中取得loader

          16 (user define path name) 手動(dòng)輸入升級(jí)固件路徑及固件名

          ==============================================================


          l 2-4三個(gè)功能實(shí)現(xiàn)單獨(dú)或者同時(shí)擦除cache userdata udisk內(nèi)容

          l 6 功能recover_image=BACKUP:update.img是從BACKUP分區(qū)獲取update.img,然后取出recovery-script腳本命令并執(zhí)行,還原固件

          l 9-15七個(gè)功能分別實(shí)現(xiàn)升級(jí)kernel、boot、system、recovery、backup、parameter和loader,如果沒有指定升級(jí)固件路徑和名稱,默認(rèn)是SDCARD:update.img。

          l 16 功能是自定義升級(jí)固件的路徑和名稱


          3、輸入命令格式例子

          Ø 格式化cache

          ./recovery_sample 2

          Ø 從backup還原所有固件

          ./recovery_sample 6

          Ø 格式化和升級(jí)混合,用空格隔開

          ./recovery_sample 2 3 4 12

          Ø 手動(dòng)輸入升級(jí)命令,自定義升級(jí)固件路徑和名稱

          ./recovery_sample --update_image=BACKUP:update.img
          ./recovery_sample --update_image=SDCARD:/rockchip/rkdroid.img 9
          ./recovery_sample --update_image=CACHE:/cache/update.img 9 14 

          ./recovery_sample --update_image=uDisk:update.img 11


          注意,在從mtd分區(qū)升級(jí)之前需要把分區(qū)mount到某個(gè)文件,然后把固件拷貝到這個(gè)文件目錄下

          10個(gè)MTD分區(qū)對(duì)應(yīng)名字和信息如下:

          #cat proc/mtd

          dev:    size   erasesize  name

          mtd0: 00400000 00001000 "misc"

          mtd1: 00800000 00001000 "kernel"

          mtd2: 00400000 00001000 "boot"

          mtd3: 00800000 00001000 "recovery"

          mtd4: 10000000 00001000 "system"

          mtd5: 10400000 00001000 "backup"

          mtd6: 07400000 00001000 "cache"

          mtd7: 10000000 00001000 "userdata"

          mtd8: 00400000 00001000 "kpanic"

          mtd9: 3dd00000 00001000 "user"

          例如從cache升級(jí),需要把cache掛接到/dev/mtdblock6,就可以從cache升級(jí)了。



          4、recovery界面說(shuō)明

          Reset以后按住home+power組合鍵,可直接進(jìn)入recovery/update界面。

          在log中如果看到

          RECOVERY key is pressed

          COMBINATION key is pressed

          說(shuō)明將要進(jìn)入recovery模式


          按鍵:

          說(shuō)明:

          vol+ 

          向下,支持菜單循環(huán)選擇

          vol - 

          向上,支持菜單循環(huán)選擇

          Play 

          確認(rèn)當(dāng)前選擇

          按鍵可以自己定義,修改gingerbread/bootable/recovery/etc/int.rc


          菜單說(shuō)明:

          Options

          名稱

          Description

          Reboot system now

          重啟系統(tǒng)

          立即重啟系統(tǒng)

          Factory reset

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

          1. 從backup分區(qū)獲取update.img 

          2. 還原除了backup以外所有分區(qū)固件
          3. 格式化USERDATA 
          4. 格式化CACHE

          Update from SDCard

          從SD卡升級(jí)

          1. 從“update-script”獲取升級(jí)命令 

          2. 從SD卡根目錄獲取升級(jí)固件update.im
          3. 升級(jí)所有固件,除了BACKUP分區(qū)
          4. 不擦除用戶數(shù)據(jù)

          Update from uDisk

          從U盤升級(jí)

          1. 從“update-script”獲取升級(jí)命令 

          2. 從uDisk根目錄獲取升級(jí)固update.img
          3. 升級(jí)所有固件,除了BACKUP分區(qū)
          4. 不擦除用戶數(shù)據(jù)

          posted on 2011-09-29 11:24 MEYE 閱讀(2279) 評(píng)論(0)  編輯  收藏 所屬分類: Android3D
          主站蜘蛛池模板: 镇巴县| 泽州县| 虹口区| 西充县| 集贤县| 德化县| 独山县| 施秉县| 策勒县| 贵阳市| 金堂县| 漳平市| 朝阳市| 介休市| 谢通门县| 天门市| 建宁县| 辽中县| 盐边县| 安平县| 罗平县| 馆陶县| 平邑县| 玉门市| 穆棱市| 岳阳县| 静宁县| 榆树市| 平度市| 湾仔区| 石林| 额尔古纳市| 托里县| 滦平县| 枞阳县| 德江县| 班戈县| 洛宁县| 仙游县| 山西省| 遵义县|