Android factory reset 流程
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 流程相关推荐
- 平述factory reset ——从main system到重引导流程
关于Android或linux的引导流程,网上大都是从开机开始讲述的,或者直接跳过bootloader引导阶段,直接从init进程开始说起.这里我从手机正常运行状态开始,到重启状态以及重启之后的状态略 ...
- [Android][FRP]Factory Reset Protection
Pass:本文有部分截图摘选自CSDN博友画图以及google/qcom文档,由于是上一年写的文章,所以暂时未能提供出处 Factory Reset Protection 功能介绍: Google F ...
- Android上电开机流程
Android的开机流程 分类: Android 转: 1. 体系勾引bootloader 1) 源码:bootable/bootloader/* 2) 申 ...
- android关机充电流程、充电画面显示
一.Android正常开机流程.关机充电流程 在写这篇文章之前我们先看两个流程:正常开机流程,关机充电系统启动流程 1.正常开机流程,按开机键. 可大致分成三部分 (1).OS_level:UBOOT ...
- Android SDCard UnMounted 流程分析(三)
前篇地址 Android SDCard UnMounted 流程分析(一) Android SDCard UnMounted 流程分析(二) 前一篇讲到SDCard unmout onEvent 发送 ...
- android camera2 API流程分析
Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原 ...
- Android -- Wifi启动流程分析
Android -- Wifi启动流程分析 Android网络各个模式中,Wifi应该是目前最常用的一种网络方式了:下面就简单介绍下Android中Wifi的启动流程. 当我在Setting菜单里点击 ...
- android 电池(二):android关机充电流程、充电画面显示
上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下android关机充电是怎么.充电画面显示是怎么实现的,这个在工作中也比较有用,我们开始做这一块的时候也走了不少的弯路.我记得我 ...
- android 电池(二):android关机充电流程、充电画面显示【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...
最新文章
- linux常用的命令行
- 敏捷开发:如何通过回顾保持学习状态
- 【Python初级】009-错误与异常
- ASP.net 2.0 Migrating系列 - Master Pages 感触
- 【Flutter】Dart 面向对象 ( mixins 特性 )
- Spring JDBC-事务方法嵌套调用解读
- 关于.NET 的网络信息,服务器端与用户端的信息
- STL9-vector容器
- linux脚本实现多重管道,制作Linux shell时流重定向和管道
- php function函数用法,js的function函数是什么?js中function的用法
- 大幅提高Android开发效率之TemplateBuilder
- Android视频会议--彩蛋
- python分析并爬取起点中文网的章节数据,最后保存为txt文档
- [随笔所想] 沉痛悼念开发技术专家毛星云老师
- npm ERR! code EINTEGRITY npm! ERR! shal-
- Tangle:不同于区块链的分布式账本
- K8S Pod该如何监控
- ale插件 vim_Vim中异步语法检查ale配置
- 台式计算机里的电池有啥用,电脑主板上的电池有什么用?看完秒懂!
- 【LiteApp系列】埋点的设计
热门文章
- java swing实现图文混排_跟我学Java Swing之游戏设计(4)
- 5大模块带你了解视频后台设计(含推荐策略)
- DWARF调试格式的简介
- 作业周转时间以及平均等待时间
- error C2059: 语法错误:“::”
- C语言编程之错误一:error C2059:syntax error : ‘)’
- js nextSibling属性和previousSibling属性概述及使用注意
- 细菌如何交流和占地盘——细菌的群体感应和生物膜
- Python Matplotlib 散点图的绘制
- MATLAB读取网页内链接,Matlab使用urlread()读取网页乱码问题