java手机恢复出厂设置_恢复出厂设置 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值