写这个的原因是在一个新的方案中,发现reboot recovery无法进入recovery模式。按照以往的理解,我一直以为android到recovery流程是因为在misc分区中写入了boot-recovery字段,但是翻来翻去,也没找到是在哪里写入,所以跟了一下reboot流程,发现好像不是我原来想的那么一回事 。
以重启进入recovery来说。
1、framework
1)RecoverySystem提供的接口中,顺序如此:
installPackage->bootCommand->pm.reboot(“recovery”);
2)这里调用powerManager的reboot接口
该接口唯一参数reason代表需要的特定重启模式,比如recovery,当然也可以为null。
public void reboot(String reason) {
try {
mService.reboot(false, reason, true);
} catch (RemoteException e) {
}
}
通过binder,调用到powerManagerService的reboot函数
@Override // Binder call
public void reboot(boolean confirm, String reason, boolean wait) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
final long ident