恢復出廠設定 Factory Reset 呼叫過程
過程分兩大步
1. Main system 往/cache/recovery/command寫命令wipe-data,重啟手機
2. bootloader引導到recovery分割槽,執行wipe-data, 重啟手機
1. Main system 往/cache/recovery/command寫命令wipe-data,重啟手機
packages/apps/Settings/src/com/android/settings/MasterClearConfirm.java
getActivity().sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
packages/apps/Settings/src/com/android/settings/MasterClear.java
frameworks/base/services/java/com/android/server/MasterClearReceiver.java
new Thread("Reboot")
RecoverySystem.rebootWipeUserData(context)
frameworks/base/core/java/android/os/RecoverySystem.java
bootCommand(context, "--wipe_data\n--locale=" + Locale.getDefault().toString());
bootCommand
write command wipe-data to /cache/recovery/command
pm.reboot("recovery");
frameworks/base/core/java/android/os/PowerManager.java
frameworks/base/services/java/com/android/server/power/PowerManagerService.java
frameworks/base/services/java/com/android/server/power/ShutdownThread.java
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
pm.reboot("recovery");
mService.reboot(false, reason, true)
shutdownOrRebootInternal(false, confirm, reason, wait);
ShutdownThread.shutdown(mContext, confirm); (shutdown)
ShutdownThread.reboot(mContext, reason, confirm); (reboot)
shutdownInner(context, confirm);
beginShutdownSequence(context)
setprop sys.shutdown.requested recovery
rebootOrShutdown(mReboot, mRebootReason);
PowerManagerService.lowLevelReboot(reason)
SystemProperties.set("sys.powerctl", "reboot," + reason); Thread.sleep(20000);
system/core/rootdir/init.rc
on property:sys.powerctl=*
powerctl ${sys.powerctl}
KEYWORD(powerctl, COMMAND, 1, do_powerctl) system/core/init/keywords.h
do_powerctl() system/core/init/builtins.c
do_reboot(cmd, 0, reboot_target); cmd = ANDROID_RB_RESTART2; system/core/init/reboot.c
__reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,LINUX_REBOOT_CMD_RESTART2, arg);
__reboot bionic/libc/arch-arm/syscalls/__reboot.S
kernel/kernel/sys.c
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)
kernel_restart(char *cmd)
machine_restart(char *cmd) kernel/arch/arm/kernel/process.c
machine_shutdown()
arm_pm_restart(reboot_mode,cmd) kernel/arch/arm/kernel/process.c
pm_power_off = msm_pm_power_off;
arm_pm_restart = msm_pm_restart; /kernel/arch/arm/mach-msm/restart_7k.c
setup_mm_for_reboot kernel/arch/unicore32/mm/mmu.c
msm_proc_comm /kernel/arch/arm/mach-msm/proc_msm.c
2. bootloader引導到recovery分割槽,執行wipe-data, 重啟手機
bootable/recovery/etc/init.rc
service recovery /sbin/recovery
bootable/recovery/recovery.c
讀取/cache/recovery/command,判定哪種命令,如果是wipe-data,
erase_volume("/data");
erase_volume("/cache");
reboot();
check master reset log: /cache/recovery/log
相關文章
- Recovery恢復出廠設定方法
- windows10恢復出廠設定的方法_win10出廠設定如何恢復WindowsWin10
- w10如何恢復出廠設定_w10恢復出廠設定的步驟
- jz2440恢復出廠設定
- 如何恢復出廠設定的Mac?Mac
- 怎麼把c盤恢復出廠設定 電腦c盤怎麼恢復出廠設定
- window10恢復出廠設定如何操作 win10電腦怎麼恢復出廠設定Win10
- win10如何一鍵恢復出廠設定 win10恢復出廠設定的步驟Win10
- mac恢復出廠設定方法介紹 mac恢復出廠設定對電腦有什麼影響Mac
- win10怎麼恢復出廠設定 win10恢復出廠設定需要裝系統嗎Win10
- OPPO K1怎麼恢復出廠設定?OPPO K1恢復出廠設定詳細教程
- win10電腦如何恢復出廠設定 win10系統恢復出廠設定的步驟Win10
- 電腦恢復出廠設定後需要重灌系統嗎 電腦恢復出廠設定後措施詳解
- 小米盒子恢復出廠設定圖文教程
- 膝上型電腦怎麼恢復出廠設定 膝上型電腦通用恢復出廠設定步驟
- win10恢復出廠設定在哪 筆記本win10怎麼恢復出廠設定Win10筆記
- 路由器恢復出廠設定後怎麼設定教程路由器
- 小心!手機恢復出廠設定資料仍可“復活”
- win8系統如何恢復出廠設定 ?
- P710管理埠恢復出廠設定
- 360路由器怎麼恢復出廠設定?路由器
- 360路由器恢復出廠怎麼設定路由器
- win10怎麼設定出廠設定 win10恢復出廠設定會怎麼樣Win10
- win10怎麼恢復出廠設定找不到恢復環境Win10
- 如何為MacBook或Mac電腦恢復出廠設定Mac
- 蘋果手機使用技巧:iPhone如何恢復出廠設定?蘋果iPhone
- 膝上型電腦怎麼回覆出廠設定 筆記本恢復出廠設定的步驟筆記
- 華碩win10強制恢復出廠設定的方法Win10
- 榮耀Watch Magic智慧手錶恢復出廠設定的方法
- windows10恢復出廠設定找不到恢復環境最佳解決方法Windows
- MySQL恢復過程MySql
- 即使恢復出廠設定也無效:Google Play 觸發感染 xHelperGo
- win10系統恢復出廠設定失敗如何解決Win10
- win10恢復出廠設定和重灌有什麼區別Win10
- 聯想自帶win10系統恢復出廠設定的方法Win10
- win10恢復出廠設定在哪裡Win10
- 戴爾筆記本win10系統怎麼恢復出廠設定筆記Win10
- 資料庫恢復過程資料庫