Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
reboot的boot flag請看文章 [RK3399][Android6.0] 系統支援的重新開機模式
注意到boot mode table中有對wipe data的支援(BOOT_WIPEDATA)
enum {
BOOT_NORMAL = 0, /* normal boot */
BOOT_LOADER, /* enter loader rockusb mode */
BOOT_MASKROM, /* enter maskrom rockusb mode (not support now) */
BOOT_RECOVER, /* enter recover */
BOOT_NORECOVER, /* do not enter recover */
BOOT_SECONDOS, /* boot second OS (not support now)*/
BOOT_WIPEDATA, /* enter recover and wipe data. */
BOOT_WIPEALL, /* enter recover and wipe all data. */
BOOT_CHECKIMG, /* check firmware img with backup part(in loader mode)*/
BOOT_FASTBOOT, /* enter fast boot mode */
BOOT_SECUREBOOT_DISABLE,
BOOT_CHARGING, /* enter charge mode */
BOOT_MAX /* MAX VALID BOOT TYPE.*/
};
rk對這個沒有做全,隻在uboot中(board_fbt_get_reboot_type())判斷有沒有wipe data的boot flag, 而在kernel中沒有去記錄儲存下來.
下面是添加的改動,修改後就可以支援如下指令直接恢複出廠設定了.
reboot wipedata
[email protected]:~/rk3288/kernel$ g df arch/arm/mach-rockchip/common.c
diff --git a/arch/arm/mach-rockchip/common.c b/arch/arm/mach-rockchip/common.c
index 107b58c..01552f3 100755
--- a/arch/arm/mach-rockchip/common.c
+++ b/arch/arm/mach-rockchip/common.c
@@ -264,7 +264,10 @@ void rockchip_restart_get_boot_mode(const char *cmd, u32 *f
else if (!strcmp(cmd, "charge")) {
*flag = SYS_LOADER_REBOOT_FLAG + BOOT_CHARGING;
*mode = BOOT_MODE_CHARGE;
- }
+ } else if (!strcmp(cmd, "wipedata")) {
+ *flag = SYS_LOADER_REBOOT_FLAG + BOOT_WIPEDATA;
+ }
} else {
這樣比文章 [RK3288][Android6.0] 調試筆記 — 指令行恢複出廠設定 的方式少執行一步了.