在使用升级包升级时怎样从主系统(main system)重启进入recovery模式,进入recovery模式后怎样判断做何种操作,以及怎样获得主系统发送给recovery服务的命令,这一系列问题的解决是通过整个软件平台不同部分之间的密切通信来完成的。为此,我们必须要了解recovery模式的工作原理,这样才能知道我们的升级包是怎样一步步进入recovery中升级并最后重启主系统的。
一、recovery模式中的三个部分
recovery的工作需要整个软件平台的配合,从通信架构上来看,主要有三个部分。
①MainSystem:即上面提到的正常启动模式(BCB中无命令),是用boot.img启动的系统,Android的正常工作模式。更新时,这种模式的上层操作就是使用OTA或从SD卡中升级升级包。在重启进入recovery模式之前,会向BCB中写入命令,以便在重启后告诉bootloader进入recovery模式。
②recovery:系统进入recovery模式后会装载recovery分区,该分区包含recovery.img(同boot.img相同,包含了标准的内核和应用程序)。进入该模式后主要是运行recovery服务(/sbin/recovery)来做相应的操作(重启、升级zip包、擦除cache分区等)。
③bootloader:除了正常的加载启动系统之外,还会通过读取MISC分区(BCB)或从/cache/recovery/command这个文件获得来自recovery模式传过来的命令。