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

===== 应用流程 =====
====>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,以便boot loader去查询。
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 factory reset 流程相关推荐

  1. 平述factory reset ——从main system到重引导流程

    关于Android或linux的引导流程,网上大都是从开机开始讲述的,或者直接跳过bootloader引导阶段,直接从init进程开始说起.这里我从手机正常运行状态开始,到重启状态以及重启之后的状态略 ...

  2. [Android][FRP]Factory Reset Protection

    Pass:本文有部分截图摘选自CSDN博友画图以及google/qcom文档,由于是上一年写的文章,所以暂时未能提供出处 Factory Reset Protection 功能介绍: Google F ...

  3. Android上电开机流程

    Android的开机流程  分类: Android  转:  1.    体系勾引bootloader  1)        源码:bootable/bootloader/*  2)        申 ...

  4. android关机充电流程、充电画面显示

    一.Android正常开机流程.关机充电流程 在写这篇文章之前我们先看两个流程:正常开机流程,关机充电系统启动流程 1.正常开机流程,按开机键. 可大致分成三部分 (1).OS_level:UBOOT ...

  5. Android SDCard UnMounted 流程分析(三)

    前篇地址 Android SDCard UnMounted 流程分析(一) Android SDCard UnMounted 流程分析(二) 前一篇讲到SDCard unmout onEvent 发送 ...

  6. android camera2 API流程分析

    Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原 ...

  7. Android -- Wifi启动流程分析

    Android -- Wifi启动流程分析 Android网络各个模式中,Wifi应该是目前最常用的一种网络方式了:下面就简单介绍下Android中Wifi的启动流程. 当我在Setting菜单里点击 ...

  8. android 电池(二):android关机充电流程、充电画面显示

    上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下android关机充电是怎么.充电画面显示是怎么实现的,这个在工作中也比较有用,我们开始做这一块的时候也走了不少的弯路.我记得我 ...

  9. android 电池(二):android关机充电流程、充电画面显示【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...

最新文章

  1. linux常用的命令行
  2. 敏捷开发:如何通过回顾保持学习状态
  3. 【Python初级】009-错误与异常
  4. ASP.net 2.0 Migrating系列 - Master Pages 感触
  5. 【Flutter】Dart 面向对象 ( mixins 特性 )
  6. Spring JDBC-事务方法嵌套调用解读
  7. 关于.NET 的网络信息,服务器端与用户端的信息
  8. STL9-vector容器
  9. linux脚本实现多重管道,制作Linux shell时流重定向和管道
  10. php function函数用法,js的function函数是什么?js中function的用法
  11. 大幅提高Android开发效率之TemplateBuilder
  12. Android视频会议--彩蛋
  13. python分析并爬取起点中文网的章节数据,最后保存为txt文档
  14. [随笔所想] 沉痛悼念开发技术专家毛星云老师
  15. npm ERR! code EINTEGRITY npm! ERR! shal-
  16. Tangle:不同于区块链的分布式账本
  17. K8S Pod该如何监控
  18. ale插件 vim_Vim中异步语法检查ale配置
  19. 台式计算机里的电池有啥用,电脑主板上的电池有什么用?看完秒懂!
  20. 【LiteApp系列】埋点的设计

热门文章

  1. java swing实现图文混排_跟我学Java Swing之游戏设计(4)
  2. 5大模块带你了解视频后台设计(含推荐策略)
  3. DWARF调试格式的简介
  4. 作业周转时间以及平均等待时间
  5. error C2059: 语法错误:“::”
  6. C语言编程之错误一:error C2059:syntax error : ‘)’
  7. js nextSibling属性和previousSibling属性概述及使用注意
  8. 细菌如何交流和占地盘——细菌的群体感应和生物膜
  9. Python Matplotlib 散点图的绘制
  10. MATLAB读取网页内链接,Matlab使用urlread()读取网页乱码问题