七八个星天外,两三点雨山前
前言
系统稳定性在任何行业都是需要的,我们的镜像存放在nand/EMMC这些存储空间里面,只读镜像的空间也容易发生位翻转,双系统可以让系统更加稳定
核心逻辑
现在Android平台已经有双系统的源码,像我们做的话可以参考源码,核心思路是建立一个空的裸分区存储A/B分区的槽位信息,在不同阶段load镜像的时候,根据槽位信息进行槽位切换;还有一个逻辑就是如果A分区的镜像校验失败了,则通过重启进入B分区并修复A分区,在此基础上,AB系统雏形就出来了
代码示例
void update_slot_info()
{
partition_cookie_type partition_cookie ;
partition_cookie = check_ab_partition_cookie() ;
switch(partition_cookie)
{
case REAL_A:
case PARTITION_EMPTY:
boot_slot_a = true;
boot_slot_b = false;
printf"Using boot image chain A\n");
break ;
case REAL_B:
boot_slot_a = false;
boot_slot_b = true;
printf"Using boot image chain B\n");
break ;
default:
boot_slot_a = true;
boot_slot_b = false;
printf("Using default Boot Chain\n");
}
}