Android 恢復出廠設定(recovery)
阿新 • • 發佈:2018-12-30
Bootloader Control Block(BCB) 存放recovery bootloader message,結構如下:
struct bootloader_message {
char command[32];
char status[32];
char recovery[768];
// The 'recovery' field used to be 1024 bytes. It has only ever
// been used to store the recovery command line, so 768 bytes
// should be plenty. We carve off the last 256 bytes to store the
// stage string (for multistage packages) and possible future
// expansion.
char stage[32];
char reserved[224];
};
command可以有以下兩個值
“boot-recovery”:表示recovery正在進行或者指示bootloader應該進入recovery mode
“update--hboot/radio”:標誌bootloader更新fireware
“recovery\n
<recovery command>\n
<recovery command>\n”其中 recovery command為CACHE:/recovery/command命令
1. 使用者選擇“恢復出廠設定”
2. 設定系統將“--wipe_data”命令寫入 /cache/recovery/command
3. 系統重啟,並進入recovery模式 (sbin/recovery or /system/bin/recovery)
4. recovery get_args() 將“boot-recovery”和“--wipe_data”寫入BCB
5. erase_root 格式化DATA 分割槽
6. erase_root 格式化CACHE 分割槽
7. finish_recovery 擦除BCB分割槽
8. 重啟系統
1. 升級系統系在OTA包包/cache/some-filename.zip
2. 升級系統寫入recovery命令 “--update_package=CACHE:some-filename.zip”
3. 重啟系統,進入recovery模式
4. get_args()將“boot-recovery”和“--wipe_packkage=...”寫入BCB
5. install_package 做升級
6. finish_recovery() 擦除BCB
7. **如果安裝包失敗**prompt_and_wait()等待使用者操作,選擇ALT+S或者ALT+W升級或回覆出廠設定
8. main() 裡面呼叫maybe_install_firmware_update()
1.如果包裡含有hboot/radio的fireware則繼續,否則返回
2.將"boot-recovery"和"--wipe_cache"寫入BCB
3.將fireware image寫入cache分割槽
4.將"update-readio/hboot"和“--wipe_date”寫入BCB
5.重啟系統
6.bootloader自身更新fireware
7.bootloader將"boot-recovery"寫入BCB
8.erase_root擦除CACHE分割槽
9.清除BCB
9. main 呼叫reboot重啟系統
Recovery程式碼位置:bootable/recovery/ ,主檔案recovery.cpp
struct bootloader_message {
char command[32];
char status[32];
char recovery[768];
// The 'recovery' field used to be 1024 bytes. It has only ever
// been used to store the recovery command line, so 768 bytes
// should be plenty. We carve off the last 256 bytes to store the
// stage string (for multistage packages) and possible future
// expansion.
char stage[32];
char reserved[224];
};
command可以有以下兩個值
“boot-recovery”:表示recovery正在進行或者指示bootloader應該進入recovery mode
“update--hboot/radio”:標誌bootloader更新fireware
recovery內容
<recovery command>\n
<recovery command>\n”其中 recovery command為CACHE:/recovery/command命令
Recovery Case
Factory reset(恢復出廠設定)
1. 使用者選擇“恢復出廠設定”
2. 設定系統將“--wipe_data”命令寫入 /cache/recovery/command
3. 系統重啟,並進入recovery模式 (sbin/recovery or /system/bin/recovery)
4. recovery get_args() 將“boot-recovery”和“--wipe_data”寫入BCB
5. erase_root 格式化DATA 分割槽
6. erase_root 格式化CACHE 分割槽
7. finish_recovery 擦除BCB分割槽
8. 重啟系統
OTA INSTALL (OTA升級)
2. 升級系統寫入recovery命令 “--update_package=CACHE:some-filename.zip”
3. 重啟系統,進入recovery模式
4. get_args()將“boot-recovery”和“--wipe_packkage=...”寫入BCB
5. install_package 做升級
6. finish_recovery() 擦除BCB
7. **如果安裝包失敗**prompt_and_wait()等待使用者操作,選擇ALT+S或者ALT+W升級或回覆出廠設定
8. main() 裡面呼叫maybe_install_firmware_update()
1.如果包裡含有hboot/radio的fireware則繼續,否則返回
2.將"boot-recovery"和"--wipe_cache"寫入BCB
3.將fireware image寫入cache分割槽
4.將"update-readio/hboot"和“--wipe_date”寫入BCB
5.重啟系統
6.bootloader自身更新fireware
7.bootloader將"boot-recovery"寫入BCB
8.erase_root擦除CACHE分割槽
9.清除BCB
9. main 呼叫reboot重啟系統
Recovery程式碼位置:bootable/recovery/ ,主檔案recovery.cpp