android 恢复出厂设置代码流程(Good!)
文章问多一般都是从完整的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!)相关推荐
- Android恢复出厂设置代码流程分析
工作中排查到了恢复出厂设置的bug, 有一些细节是需要注意的,于是把这块的代码流程看一下: 代码基于:Android9.0 应用层: 就发送MASTER_CLEAR的广播, 这里没有带参数的 priv ...
- Android恢复出厂设置代码+脚本
/*** 恢复出厂设置,需要系统权限,以及系统签名 android:sharedUserId="android.uid.system"*/ public void resetSys ...
- android 恢复出厂设置 代码,android恢复出厂设置以及系统升级流程
http://www.bangchui.org/simple/?t5938.html ============================================= 恢复出厂设置流程概括: ...
- Android 恢复出厂设置上层流程
最近看恢复出厂的一个问题,以前也查过这方面的流程,所以这里整理一些AP+framework层的流程: 在setting-->备份与重置--->恢复出厂设置--->重置手机---> ...
- android恢复出厂设置的流程
原址:http://blog.csdn.net/sergeycao/article/details/8151808 在MasterClearConfirm.java中显示恢复出厂提示和对应button ...
- Android 恢复出厂设置(recovery)
Android 恢复出厂设置基本流程 (1)遥控器/按键板后门键触发,或者应用里面从系统设置里面恢复出厂选项也可触发: // 后面以系统设置的应用触发为例 (2)选择恢复出厂设置之后,就会发送广播&q ...
- android 恢复出厂设置 时间,Android 恢复出厂设置后,时间不能恢复替:2013年1月1日...
Android 恢复出厂设置后,时间不能恢复为:2013年1月1日 前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http ...
- Android 恢复出厂设置(系统时间不修改)
Android恢复出厂设置时,只会将/data和/cache分区进行清除,时间和其他分区不会清除, 时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动 ...
- Android恢复出厂设置流程分析【Android源码解析十】
最近看恢复出厂的一个问题,以前也查过这方面的流程,所以这里整理一些AP+framework层的流程: 在setting-->备份与重置--->恢复出厂设置--->重置手机---> ...
最新文章
- 先验概率,后验概率,条件概率,贝叶斯
- 二十五、数据挖掘之离群点检测
- 如何将iso文件安装到VirtualBox里的ubuntu去
- 磁盘与目录的容量(转)
- [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)
- 阿里云如何二次驱动云计算
- 更改SAP的字段翻译
- 越是经济下行,越是赚大钱的好机会!
- Linux下安装gcc报错的情况解决方案
- ppt复制切片器_零基础小白自学PPT快速入门到精通(上)
- 计算机桌面桌面设置动态视频,电脑壁纸 篇一:电脑设置动态视频桌面图文教程...
- forge java7_1.构建forge
- keil5c语言定义引脚,keil编写C程序是不是不能在函数内定义变量啊,求大神
- 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
- sql时间转换时分秒_sql秒转换成时分秒格式
- 【第五课】UAV倾斜摄影测量三维建模之空三计算问题
- IPAD USB 充电程序
- 如何搭建高德离线地图服务
- 服务器重装系统鼠标没反应,重装系统鼠标键盘不能用怎么解决-重装系统鼠标键盘失灵的解决方法 - 河东软件园...
- 第一章 编程基础_ASCII 编码和GBK编码
热门文章
- iPhone的Push(推送通知)功能原理浅析
- ubuntu 装完系统之后的简单配置
- 三刺激值计算公式_常用的车削、铣削和钻削计算公式,转走不谢
- 手机服务器密码在什么位置,手机远程云服务器登录密码是什么
- 一机三屏台式计算机,三屏系统重现江湖:背后一台完整主机
- Javascript第六章计时器练习【源码】第四课
- WebStorm 2018.3.4破解方式
- 计算机桌面变色怎么办,电脑屏幕变色了怎么办
- miui锁屏通知显示android,MIUI10系统又更新了!新增勿扰锁屏通知功能,修复系统Bug...
- 使用php进行财务统计,基于php的基金财务数据接口调用代码实例