if (wipe_flags) { if( wipe_data(wipe_flags) != 0 ) { status = INSTALL_ERROR; ui_print("Data wipe failed.\n"); // 不擦除misc中的命令,重启后再次格式化 g_reset_blmsg = false; g_enable_item_move = false; } }
这部分是擦除数据,就是格式化需求,根据擦除flags记录,分别去擦除需要格式化的分区或者磁盘,如果擦除失败,g_reset_blmsg 这个变量在擦除boot时候作为判别依据,false表示不擦出,这样,misc分区的内容还是recovey,下次重启后,boot引导进入recovery模式 prompt_and_wait()函数里面,关键部分for (;;) { int key = 0; INFO("wait an key\n"); key = ui_wait_key(); INFO("end wait\n");
这个函数作用就是一直在等待用户输入是一个不断的循环,可以选择五个条目,包括恢复出厂设置和重启等;maybe_install_firmware_update(send_intent);是给用户一个机会,写入你的intent,做一些谷歌没有做的事这个就是完成升级的最后一个函数,// Reset the bootloader message to revert to a normal main system boot. if(g_reset_blmsg) { INFO("ready to clear cmd in misc \n"); struct bootloader_message boot; memset(&boot, 0, sizeof(boot)); set_bootloader_message(&boot); }
在这之前是针对intent的一个处理,这里g_reset_blmsg是根据上文提到的清除boot的一个判据,如果需要清除boot,表明下次重启后正���启动,不进入recovery模式 6、reboot处理完boot和misc分区,重启