过程分两大步

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

恢复出厂设置 Factory Reset 调用过程相关推荐

  1. Xcode6恢复出厂设置(reset Xcode to its original state)

    最近发现使用Xcode6.3.1新建项目,会自动多了一个Build文件,正常的应该是只有三个文件(与项目名同名的文件夹.与项目名同名的".xcodeproj"文件,还有" ...

  2. android 恢复出厂设置流程分析,基于Android系统快速恢复出厂设置方法实现.doc

    基于Android系统快速恢复出厂设置方法实现 基于Android系统快速恢复出厂设置方法实现 摘 要:针对使用Android系统的智能电视进行恢复出厂设置时重置速度慢的情况进行了研究和分析,从其重置 ...

  3. 将win10的电脑恢复出厂设置以及后续问题处理

    恢复出厂设置之旅 起因 过程 启动后的情况及出现的问题 鼠标右键后转圈不显示右键内容 右键菜单出现在箭头左边 桌面图标的消失 总结 起因 一直以来,对电脑使用的规划不足,导致c盘急剧爆满变红,最终选择 ...

  4. 华为交换机重置console账户密码(恢复出厂设置)

    华为交换机重置console账户密码 重启设备 Backup U-Boot ............................................................. ...

  5. android 系统复位(Reset 恢复出厂设置)9.0源码分析

    今天来从源码的角度 分析一下android 系统复位的流程 1. 从点击 Reset 看起.点击Reset后,会弹出Erase everything.故而从在Setting中搜索此字段开始. 因为我这 ...

  6. Android6.0 Reset恢复出厂设置流程分析

    点击Settings应用中的恢复出厂设置按钮后流程分析: 先使用grep命令搜索"恢复出厂设置"字符串,找到相应的布局文件: packages/apps/Settings/res/ ...

  7. SonicWALL防火墙恢复出厂设置Reset

    拿了一台,Sonicwall pro 4060将不在使用的防火墙,发现密码不能进入系统.尝试使用经常使用的密码登陆系统,均无效果.最终选择,恢复出厂设置. 使用工具较为简单,一根回形针,触发防火墙背后 ...

  8. android reset无命令,三星手机忘记密码怎么强制恢复出厂设置

    很多朋友不知道三星手机忘记密码怎么强制恢复出厂设置,现在就给朋友们介绍一下. 第一步:关机 第二步:长按下音量+    bixby健不放   ,然后再按下电源键(注意,如果没有bixby键,按下hom ...

  9. linux文件删除 能恢复出厂设置密码,OpenWrt固件通过reset键恢复出厂设置步骤

    OpenWrt固件通过reset键恢复出厂设置步骤 ?更新时间:2014-06-15 ?来源:本站小编 ?浏览:2295次 OpenWrt 可以说是Linux的发行版,OpenWrt的包管理提供了一个 ...

  10. 安卓恢复出厂设置过程详解

    本文基于Android R.高通平台. 设置中点击"恢复出厂设置"即可清楚用户数据.查看代码发现其只是发送了一个广播而已. Intent intent = new Intent(I ...

最新文章

  1. zabbix监控管理维护脚本
  2. html 自动隐藏属性,隐藏(属性) | hidden (attribute)
  3. 拼多多和国美合作,这可不仅仅是可转债的问题
  4. 配置管理小报100629:我是项目组成员,事情比较急,按流程需要项目经理批准,但项目经理不在怎么办?...
  5. C++基础知识学习笔记
  6. 【OpenCV入门学习笔记1】:Mat对象的指针操作和掩膜操作
  7. 文章页点赞php代码,wordpress文章页面添加点赞功能
  8. python中二维列表的遍历方式(亲测)
  9. ServiceMix中部署:OSGi Bundle和Feature
  10. 一步一步带你搭建SpringCloud微服务
  11. Pycrypto与RSA密码技术
  12. 随机过程之更新理论的应用
  13. iOS HealthKit
  14. FoxNFT创世品牌娘卡包预售6月15日正式开启!五位姑娘正式与大家见面
  15. Java Mail 发送邮件126、163 、QQ
  16. HTML+CSS实现导航条及下拉菜单
  17. 微信公众平台开发2-access_token获取及应用(含源码)
  18. 异常处理·EF·准备命令定义时发生错误。有关详细信息,请参阅内部异常
  19. C/C++实现双目矫正(不使用OpenCV内部函数)及矫正源码解析
  20. RJ45以太网接口EMC设计方案

热门文章

  1. matplotlib图表涉及中乱码问题
  2. Pytorch:目标检测网络-人体关键点检测
  3. 自定义炫酷效果ViewPage指示器
  4. 深度可分离卷积解析 - MobileNetV1
  5. 安信可IDE 1.5编译ESP8266 RTOS 3.0
  6. dell台式计算机恢复出厂设置,戴尔Win10电脑怎么恢复出厂设置?
  7. Mixly Aduino 超声波~蜂鸣器
  8. 故障解决:端口已被占用 1080
  9. 51单片机开发板、usb写代码、pcb版
  10. 【学习笔记】极其美妙的算法——FFT(快速傅里叶变换)