android的恢复出厂设置

文章问多一般都是从完整的recover mode讲起,恢复出厂设置只是 recovery mode下一个小部分。

recovery mode流程分析的文章很多,比较完整的有:

http://blog.csdn.net/yahoozhuo/article/details/6403140

这个blog的内容,后面有copy,仅供备份,看原网页格式更好。

熟悉流程之后,为便于理解,需要知道下面几点:

1. flash存储上有专用的recovery分区,里面存有完整的一套的ramdisk, kernel等,recovery mode启动后,启用这个分区下的ramdisk 和 kernel。

2. recovery 是一个Linux应用,可以通过修改参数--wipe_data,在cache/recovery/command 文件里。

3. 如果想要定制恢复出厂设置功能,比如/data 分区下保留某些文件,应该就是看recovery应用及其配置了。

下面是原博客的COPY: 

Android Factory Reset flow

=====应用流程=====
====>frameworks/base/services/Java/com/Android/server/MasterClearReceiver.java
RecoverySystem.rebootWipeUserData(context);

====>framesworks/base/core/java/android/os/RecoverySystem.java
rebootWipeUserData ===> bootCommand(context, "--wipe_data");
bootCommand写参数"--wipe_data"到/cache/recovery/command后,
调用pm.reboot("recovery");

====>frameworks/base/core/java/android/os/Power.java
reboot ===> rebootNative

====>frameworks/base/core/jni/android_os_Power.cpp
JNI 映射
{ "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot},
android_os_Power_reboot ===> __reboot

====>bionic/libc/arch-arm/syscalls/__reboot.S
ldr r7, =__NR_reboot  // bionic/libc/include/sys/linux-syscalls.h
b  __set_syscall_errno

#define __NR_reboot  (__NR_SYSCALL_BASE + 88)

=====内核流程=====
====>kernel/arch/arm/kernel/calls.S
/* 88 */    CALL(sys_reboot)

====>kernel/sys.c
sys_reboot定义在kernel/include/linux/syscalls.h,实现在kernel/kernel/sys.c

在这里,判断buffer的内容,用一个寄存器记录是否是recovery mode,以便bootloader去查询。
sys_reboot会调用kernel_restart
kernel_restart调用每一个架构特定的machine_restart,即machine_restart执行每个架构特定的函数

====>kernel/arch/arm/kernel/process.c
machine_restart==>arm_pm_restart==>arm_machine_restart==>arch_reset

====>kernel/arch/arm/mach-tegra/include/mach/system.h
arch_reset

===== bootloader流程=====
机器重启,重新进入bootloader。bootloader首先会读寄存器的内容,根据这个值决定是否进入recovery模式或者其它模式。
bootloader然后加载recovery内核。

===== recovery应用流程=====
recovery内核中的init.rc会运行recovery

recovery应用会读取cache/recovery/command
读取参数后执行相应操作,这里参数是--wipe_data,放在cache/recovery/command里

把DATA和CACHE清空后重启系统,此时内核重启时写的寄存器参数RB_AUTOBOOT跟前面不同的
bionic/libc/include/sys/reboot.h
#define RB_AUTOBOOT     LINUX_REBOOT_CMD_RESTART
不会再让bootloader进入recovery模式,而是正常启动。

android 恢复出厂设置代码流程(Good!)相关推荐

  1. Android恢复出厂设置代码流程分析

    工作中排查到了恢复出厂设置的bug, 有一些细节是需要注意的,于是把这块的代码流程看一下: 代码基于:Android9.0 应用层: 就发送MASTER_CLEAR的广播, 这里没有带参数的 priv ...

  2. Android恢复出厂设置代码+脚本

    /*** 恢复出厂设置,需要系统权限,以及系统签名 android:sharedUserId="android.uid.system"*/ public void resetSys ...

  3. android 恢复出厂设置 代码,android恢复出厂设置以及系统升级流程

    http://www.bangchui.org/simple/?t5938.html ============================================= 恢复出厂设置流程概括: ...

  4. Android 恢复出厂设置上层流程

    最近看恢复出厂的一个问题,以前也查过这方面的流程,所以这里整理一些AP+framework层的流程: 在setting-->备份与重置--->恢复出厂设置--->重置手机---> ...

  5. android恢复出厂设置的流程

    原址:http://blog.csdn.net/sergeycao/article/details/8151808 在MasterClearConfirm.java中显示恢复出厂提示和对应button ...

  6. Android 恢复出厂设置(recovery)

    Android 恢复出厂设置基本流程 (1)遥控器/按键板后门键触发,或者应用里面从系统设置里面恢复出厂选项也可触发: // 后面以系统设置的应用触发为例 (2)选择恢复出厂设置之后,就会发送广播&q ...

  7. android 恢复出厂设置 时间,Android 恢复出厂设置后,时间不能恢复替:2013年1月1日...

    Android 恢复出厂设置后,时间不能恢复为:2013年1月1日 前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处: CSDN:http ...

  8. Android 恢复出厂设置(系统时间不修改)

    Android恢复出厂设置时,只会将/data和/cache分区进行清除,时间和其他分区不会清除, 时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动 ...

  9. Android恢复出厂设置流程分析【Android源码解析十】

    最近看恢复出厂的一个问题,以前也查过这方面的流程,所以这里整理一些AP+framework层的流程: 在setting-->备份与重置--->恢复出厂设置--->重置手机---> ...

最新文章

  1. 先验概率,后验概率,条件概率,贝叶斯
  2. 二十五、数据挖掘之离群点检测
  3. 如何将iso文件安装到VirtualBox里的ubuntu去
  4. 磁盘与目录的容量(转)
  5. [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)
  6. 阿里云如何二次驱动云计算
  7. 更改SAP的字段翻译
  8. 越是经济下行,越是赚大钱的好机会!
  9. Linux下安装gcc报错的情况解决方案
  10. ppt复制切片器_零基础小白自学PPT快速入门到精通(上)
  11. 计算机桌面桌面设置动态视频,电脑壁纸 篇一:电脑设置动态视频桌面图文教程...
  12. forge java7_1.构建forge
  13. keil5c语言定义引脚,keil编写C程序是不是不能在函数内定义变量啊,求大神
  14. 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
  15. sql时间转换时分秒_sql秒转换成时分秒格式
  16. 【第五课】UAV倾斜摄影测量三维建模之空三计算问题
  17. IPAD USB 充电程序
  18. 如何搭建高德离线地图服务
  19. 服务器重装系统鼠标没反应,重装系统鼠标键盘不能用怎么解决-重装系统鼠标键盘失灵的解决方法 - 河东软件园...
  20. 第一章 编程基础_ASCII 编码和GBK编码

热门文章

  1. iPhone的Push(推送通知)功能原理浅析
  2. ubuntu 装完系统之后的简单配置
  3. 三刺激值计算公式_常用的车削、铣削和钻削计算公式,转走不谢
  4. 手机服务器密码在什么位置,手机远程云服务器登录密码是什么
  5. 一机三屏台式计算机,三屏系统重现江湖:背后一台完整主机
  6. Javascript第六章计时器练习【源码】第四课
  7. WebStorm 2018.3.4破解方式
  8. 计算机桌面变色怎么办,电脑屏幕变色了怎么办
  9. miui锁屏通知显示android,MIUI10系统又更新了!新增勿扰锁屏通知功能,修复系统Bug...
  10. 使用php进行财务统计,基于php的基金财务数据接口调用代码实例