在android中有多种方式可以进入recovery模式进行升级,这里只对判断misc分区进行升级做分析。其他方式的资料网上都很全面了。感谢那些做出贡献的大虾!
系统上电fastboot在初始化硬件之后,就会去读misc分区。根据该分区的内容来判断是进入recovery模式还是正常启动!该分区存放的是一个bootloader_message结构体,fastboot会读取该结构体的command的内容判断是否为"boot-recovery",如果是就进入recovery。否则会正常启动。
结构体如下:
struct bootloader_message {
char command[32];
char status[32];
char recovery[1024];
};
网上很多资料都没对misc分区是什么时候写的做介绍!下面将详细介绍这个流程!当用户选择设置->升级->确认后, 会调用到SystemUpdate-JNI ,在system/lib下会有一个libupdatexxx.so,名字可以手动改得。在这个so里面有set_sdcard_update_bootloader_message()的接口,无论是升级还是回复出厂设置,都会调用该接口,该函数会调用到另外一个函数set_bootloader_message()。这个函数就是写真正写misc的地方。只有该函数成功执行之后,系统重启才会进入recovery模式,否则reset之后就直接正常启动了。不会进行升级。所以这个地方就是进入升级的关键地方了
其实除了在set_bootloader_message中写过misc分区之外。还有一个地方会写misc分区。在系统进入recovery模式之后之后,会执行/sbin/recovery这个可执行程序,recovery这个可执行程序的入口是mian()。在mian()中有一个get_args(arc,agv)