===== 应用流程 =====
====>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 recovery代码分析
android recovery运行流程,这个是本人总结的。
iCare Data Recovery是一款国外流行的简单数据恢复软件。它能够恢复已删除的文件、被格式化的文件和分区时损失的文件。对于引导区损坏而导致的数据遗失,也可以通过它找到。恢复被病毒删除的文件,更是不在话下。...
android-recovery-code.rar android-recovery-code.rar
recovery开发利用代码控制机器获取刷机平台。
Advanced Archive Password Recovery recovers passwords and removes protection from ZIP and RAR archives created with all versions of PKZip, WinZip, RAR and WinRAR in their GUI and command-line ...
android recovery模式下可用的较大的字体,直接将此头文件放到bootable\recovery\minui目录下,修改graphics.cpp中对原字体头文件的引用为本文件即可。
华为通用官方recovery恢复教程(同样适用于第三方recovery刷入)
NULL 博文链接:https://werr1985.iteye.com/blog/954078
rk平台单独编译recovery的命令,rk平台单独编译recovery的命令
recovery
Recovery for Excel
中兴努比亚Z5 mini 中文recovery
O&O MediaRecovery数据恢复工具介绍 O&O MediaRecovery数据恢复工具是一款专门恢复文档文件和数码照片的数据恢复软件,具有使用简单,恢复文件针对性强的特点,是数据恢复公司经常使用的一款软件, O&O Media...
密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复...
PDF Password RecoveryPDF Password RecoveryPDF Password RecoveryPDF Password RecoveryPDF Password Recovery
* 感谢twrp团队以及github上无偿贡献的代码; *感谢xiaolu、dianlujitao、Nian 等 支持微博 20160324更新日志: 1、完善去除boot verify补丁,解决刷部分官方ROM导致无法开机bug; 2、高级选项增加关闭BOOT...
XT800_recovery_only 刷机专用。
如何进入Recovery模式 安卓手机进入Recovery模式方法大全
小米官方助手 小米5刷Recovery工具 小米5recovery.img