为什么要分析 recovery.cpp 这个文件?
我们知道,当我们通过按键或者应用进入 recovery 模式,实质是 kernel 后加载
recovery.img,kernel 起来后执行的第一个进程就 是 init,此进程会读入 init.rc 启动相
应的服务。在 recovery 模式中,启动的服务是执行 recovery 可执行文件,此文件是
bootable/recovery/recovery.cpp 文件生成,我们就从 recovery.cpp 文件开始分析。
BOOT: boot.img,Linux kernel (within normal ramdisk)
MISC: bootloader message struct
RECOVERY: recovery.img,Linux kernel (within recovery
ramdisk)
SYSTEM: system.img
DATA: userdata.img
CACHE: some cache files
下面的代码位于 bootable/recovery/etc/init.rc,由此可知,进入 recovery 模式后会执
行 sbin /recovery,此文件是 bootable/recovery/recovery.cpp 生成(可查看对应目
录的 Android.mk 查看
每次启动,flash_image 程序,会检查 recovery 分区中 image 的 header,如果与备份
的 recovery.img 不符,就会把备份写到 RECOVERY 分区。这样做是为了应对 RECOVERY 分区
遭到破坏。当然,我们也可以更换这个备份,这样也会将其写到 RECOVERY。事实上,处于
安全及版权考虑,OTA 是有签名的(其实就是 JAR 包),Recovery 对签名有要求,所以只
能进行被允许的升级,此时的破解思路就是更换一个不检查签名的 Recovery 程序,方法就
是设法更换/system/recovery.img。
http://blog.csdn.net/llping2011/article/details/37923045
http://blog.csdn.net/hearbeat/article/details/61207845 recovery 启动
三个部分、两个接口
Recovery 的工作需要整个软件平台的配合,从架构角度看,有三个
部分:
1) Main system:用 boot.img 启动的 Linux 系统,Android 的正
常工作模式。
2) Recovery:用 recovery.img 启动的 Linux 系统,主要是运行
Recovery 程序。