關於recovery的程式碼分析,見另一篇
Android
Recoveryの程式碼分析
做個升級程式,支援SD卡、隨身碟、Flash三種路徑升級
該升級應用程式要和/recovery/sbin/下的recovery配套使用,
韌體共有boot.img,recovery.img,system.img,
其中system.img是空的,system.img打包格式要和recovery.img匹配
使用此程式:
先把librecovery.so是添加到rootfs檔案系統庫中,
再把應用程式recovery_sample添加到某目錄下,
然後執行recovery_sample就可以實現update功能
文檔包括四部分:
l update庫和應用檔案
l update使用及命令
l 輸入命令格式例子
l update/recovery介面
1、Update庫和應用檔案
檔案一:Recovery
是存在於/gingerbread/bootable/,用於產生recovery可執行檔,產生完將其拷貝到UpdateRecoveryfs/recoveryfs/sbin/目錄下
檔案二:UpdateLibSample
用於產生update應用的庫檔案librecovery.so和可執行檔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打包格式要一致,統一為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格式化使用者資料
4 --wipe_udisk格式化隨身碟資料
6 --recover_image=BACKUP:update.img恢復出廠預設值,從backup還原所有韌體
7 --update_image=SDCARD:update.img預設路徑,從SD卡根目錄下韌體update.img升級
9 --update_kernel單獨升級kernel,從SD卡update.img中取得kernel韌體
10 --update_boot單獨升級boot,從SD卡update.img中取得boot韌體
11 --update_system單獨升級system,從SD卡update.img中取得system韌體
12 --update_recovery單獨升級recovery,從SD卡update.img中取得recovery韌體
13 --update_backup單獨升級backup分區,拷貝SD卡的update.img到backup
14 --update_parameter單獨升級parameter,從SD卡update.img中取得parameter
15 --update_loader單獨升級loader,從SD卡update.img中取得loader
16 (user define path name) 手動輸入升級韌體路徑及韌體名
==============================================================
l 2-4三個功能實現單獨或者同時擦除cache userdata udisk內容
l 6 功能recover_image=BACKUP:update.img是從BACKUP分區擷取update.img,然後取出recovery-script指令碼命令並執行,還原韌體
l 9-15七個功能分別實現升級kernel、boot、system、recovery、backup、parameter和loader,如果沒有指定升級韌體路徑和名稱,預設是SDCARD:update.img。
l 16 功能是自訂升級韌體的路徑和名稱
3、輸入命令格式例子
Ø 格式化cache
./recovery_sample 2
Ø 從backup還原所有韌體
./recovery_sample 6
Ø 格式化和升級混合,用空格隔開
./recovery_sample 2 3 4 12
Ø 手動輸入升級命令,自訂升級韌體路徑和名稱
./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分區升級之前需要把分區mount到某個檔案,然後把韌體拷貝到這個檔案目錄下
10個MTD分區對應名字和資訊如下:
#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升級,需要把cache掛接到/dev/mtdblock6,就可以從cache升級了。
4、recovery介面說明
Reset以後按住home+power按鍵組合,可直接進入recovery/update介面。
在log中如果看到
RECOVERY key is pressed
COMBINATION key is pressed
說明將要進入recovery模式
按鍵: |
說明: |
vol+ |
向下,支援菜單迴圈選擇 |
vol - |
向上,支援菜單迴圈選擇 |
Play |
確認當前選擇 |
按鍵可以自己定義,修改gingerbread/bootable/recovery/etc/int.rc
菜單說明:
Options |
名稱 |
Description |
Reboot system now |
重啟系統 |
立即重啟系統 |
Factory reset |
恢復出廠預設值 |
1. 從backup分區擷取update.img 2. 還原除了backup以外所有分區韌體 3. 格式化USERDATA 4. 格式化CACHE |
Update from SDCard |
從SD卡升級 |
1. 從“update-script”擷取升級命令 2. 從SD卡根目錄擷取升級韌體update.im 3. 升級所有韌體,除了BACKUP分區 4. 不擦除使用者資料 |
Update from uDisk |
從隨身碟升級 |
1. 從“update-script”擷取升級命令 2. 從uDisk根目錄擷取升級固update.img 3. 升級所有韌體,除了BACKUP分區 4. 不擦除使用者資料 |