最近,遇到个recovery恢复工程设置的时候时间过长且有黑屏问题分。
以前没有遇见过这个问题,最近的软件的版本才暴露出来。
通过版本回退,发现没有发现什么致命的修改。
* FACTORY RESET
* 1. user selects "factory reset"
* 2. main system writes "--wipe_data" to /cache/recovery/command
* 3. main system reboots into recovery
* 4. get_args() writes BCB with "boot-recovery" and "--wipe_data"
* -- after this, rebooting will restart the erase --
* 5. erase_volume() reformats /data
* 6. erase_volume() reformats /cache
* 7. finish_recovery() erases BCB
* -- after this, rebooting will restart the main system --
* 8. main() calls reboot() to boot main system
recovery恢复工程设置中,最重要的两个操作:
1 format : /data 和 /cache分区
2 make_ext4 或 yaffs2 ,重建文件系统分区
首先分析恢复工程设置时间过长的问题:
最后通过,kernel及应用层打印时间,发现瓶颈在:
#if defined(CACHE_MERGE_SUPPORT) int result = make_ext4fs(v->device, v->length, target_volume, sehandle); #else int result = make_ext4fs(v->device, v->length, volume, sehandle); #endif
但是,从来没有修改过此函数,呵呵,其实也没有能力修改到这个部分。
最后,通过对比另一台手机(不同EMMC,但是都是SAMSUNG的),发现另一台手机的时间少了很多
几乎是: 几秒 同 60 秒的区别。
由于软件一模一样,只是机器设备不一样(EMMC不同),由此确定是EMMC的不同导致性能相差很多,马上联系FAE,确认此问题点是否有改善的余地。
对于第二个问题,一直黑屏的问题:
ui->SetBackground(RecoveryUI::ERASING); ui->SetProgressType(RecoveryUI::INDETERMINATE); //ui->Print("Formatting %s...\n", volume);
由于多言语的问题(如俄罗斯客户不希望看到英语等等,反正客户要求的就是正确的)
//ui->Print("Formatting %s...\n", volume);
把上面这句话,屏蔽掉了,导致界面不刷新,保持之前黑屏的样子
又由于之间格式化的时间非常短,所以这个问题一直没有暴露出来
这次刚刚好,两个问题一起出来
参考:
/bootable/recovery/recovery.cpp
/bootable/recovery/roots.cpp