FOTA技术专栏—A/B升级

汽车安全 2年前 (2022) admin
1,011 0 0

FOTA技术专栏—A/B升级


上一期《FOTA技术专栏—UDS刷写》,笔者主要介绍了UDS刷写的基础知识,并阐释了刷写的业务流程。对于沿袭分布式电子电气架构的汽车,车内绝大多数控制器仅由MCU构成,网络通信方式也主要以CAN总线为主。对于此种配置,UDS刷写便足以支撑FOTA绝大部分的车端升级业务。
 
然而,在智能化、网联化的浪潮下,汽车俨然变成了一头庞大的、移动的数据猛兽,随时随地都在产生、发送、接收、存储和处理海量的数据。而拥有高算力芯片,大容量存储空间,并支持车载以太网等多种网络通信方式的智能控制器,逐渐在这种氛围中找到感觉,开始在车端崭露头角。
 
智能控制器基本采用Linux、Android等遵循POSIX标准的操作系统,其FOTA业务流程中的升级包下载和更新过程可由自身完成。基于此,在手机行业成熟应用并具有悠久历史的A/B升级开始在车端智能控制器的升级中得到了极大的关注和应用。

FOTA技术专栏—A/B升级
A/B升级简介


A/B升级首先在智能手机的Android系统上得到大量应用。
 
使用过Android系统手机,有刷机经历的同学对Android Recovery模式不会太陌生。进入该模式后,用户可对Android系统进行数据修改,数据备份、系统升级,以及恢复出厂设置等。
 
Android系统7.0之前,由于升级过程没有备份或冗余功能,如果在Recovery模式下搞小动作失败,同时还损坏了Recovery程序,那么你的手机不仅丧失升级的能力,而且无法再正常进入原来版本的系统。
 
所以在上个十年智能手机热潮之初,刷系统需要小心翼翼如履薄冰,刷机变砖喜闻乐见。路边不少专营越狱刷机的苍蝇小店根本无法保证刷机的可靠性,成功与否全靠运气。
 
在谷歌后续发布的Android系统版本中,开始采用A/B升级的方式取代Recovery刷写方式,官网中也称之为无缝升级(Seamless update)。
 
所谓A/B升级,是指在设备上开辟两个存储空间(A/B存储空间),每个存储空间上均安装有一个系统,其中一个系统处于激活使用状态,另外一个系统处于备用待命状态。在进行系统升级时候,可在激活的系统中对备用系统进行升级,升级完成重启后切换成新升级的系统。
 
随着谷歌在Android 11版本中要求设备采用强制A/B分区,A/B升级开始在广泛地被应用。A/B升级与传统Recovery升级相比拥有如下的优点:
 
(1)升级过程中可以保证有一个可以正常运行的系统,降低设备变砖的率几率。即使设备掉电或其他异常中断了升级过程,也能保证设备再次上电后系统可以正常运行。

(2)升级过程可以在系统运行时进行而不会中断用户正常使用。升级完成后用户仅需重启,且重启所用的时间不会超过常规重新启动所用的时间。

(3)如若升级失败导致刷写程序被损坏,用户可使用系统旧版本,并再次尝试升级。

(4)如果升级完成但无法启动,系统将回滚到旧分区,用户仍然可以正常使用系统,并继续尝试升级。

(5)升级包可以流式传输到A/B设备,意味设备无需在缓存分区上预留空间以存储升级包。
 
FOTA技术专栏—A/B升级
分区和业务时序说明


传统Recovery升级方式下的系统分区如下图所示:

FOTA技术专栏—A/B升级


A/B升级方式下的系统分区如下图所示:
 

FOTA技术专栏—A/B升级

 
以Linux操作系统为例对各分区含义进行说明,其他操作系统类似:
 
  • bootloader:存放用于引导Linux的bootloader,传统方式bootloader通过读取misc分区信息来决定是进入Linux主系统还是Recovery系统。A/B方式的bootloader通过特定的分区信息来决定是从slot A还是slot B启动。

  • boot:存放主系统的Linux kernel文件和用于挂载system和其他分区的ramdisk。

  • system:主系统分区,包括系统应用程序和库文件。

  • vendor:主系统分区,主要是包含开发厂商定制的一些应用和库文件,很多时候开发厂商也直接将这个分区的内容直接放入system分区。

  • userdata:用户数据分区,存放用户数据,包括用户安装的应用程序和使用时生成的数据。

  • cache:临时存放数据的分区,通常用于存放OTA的升级包。

  • recovery:存放传统Recovery系统的linux kernel文件和ramdisk。

  • misc:存放主系统和Recovery系统跟bootloader通信的数据。
 
对于A/B升级的系统而言,boot,system和vendor系统分区变为两套,使用了称为slot的分区,分别是slot A和slot B。同时不再需要cache和recovery分区,misc分区也是可选的。任何情况都有一个slot是活跃slot。bootloader下次启动时使用的slot,被标记为active属性。
 
每个slot都有一个可启动属性(bootable),该属性用于表明设备可从相应slot启动。此外,每个slot还都有一个由用户空间设置的成功属性(successful),仅当相应slot处于可启动状态时,该属性才具有相关性。被标记为成功的slot应该能够自行启动、运行和更新。
 
典型应用场景如下,假定当前从slot B中启动。
  

FOTA技术专栏—A/B升级


(1)正常情况。最常见的情形,例如设备下线时,A分区和B分区都可以成功启动并正确运行,所以两个分区都设置为bootable和successful,但由于是从B分区启动,所以只有B分区设置为active。

(2)升级中。系统正在从B分区运行,因此,B分区是可启动(bootable)且被标记为成功(successful)的活动分区。由于正在更新A分区,因此A分区被标记为不可启动(unbootable)。在此状态下,重启仍从slot B运行。

(3)升级完成。正在等待重新启动:系统正在从B分区运行,B分区可启动(bootable)且被标记为成功(successful),A分区升级完成后,重启后需要从A分区启动被标记为active和bootable,但尚未验证成功,所以不能被标记为successful,bootloader应尝试从A分区启动。

(4)系统重启。设备重启后,bootloader检测到A分区为active,完成校验之后,A分区如能正确运行,应将slot A 标记为成功(successful)。对比第1个普通场景,A和B分区都设置为bootable和successful,但active从B分区切换到A分区。至此,B分区成功更新并切换到A分区,设备重新进入正常场景。

FOTA技术专栏—A/B升级
车端A/B分区升级同步策略


随着整车电子电气架构中出现越来越多的智能控制器,A/B升级在车辆的FOTA升级中愈发重要。而智能控制器升级后宕机导致整车功能不可使用是灾难性的,因此汽车FOTA升级相比于手机更注重升级的稳定性和鲁棒性。
 
分区同步策略就是升级中一个非常重要的考虑因素。
 
例如某一智能控制器A分区激活,B分区升级成功后,B分区启动,A分区则变为B分区的备用分区,是否对当前的备用分区A进行分区同步,则是主机厂需要去根据实际情况考虑的。 
 

FOTA技术专栏—A/B升级


如果选择同步A分区会有以下两点的风险:

(1)A分区有升级失败的可能。

(2) A分区为旧版本,已被验证是一个相对稳定的版本。如将A分区同步升级,A/B分区皆为新版本系统,如果新版本系统不稳定,则控制器无法切换至稳定系统运行。

如果选择将A分区保持在旧版本,例如本次升级任务后,A分区维持在V1.0的旧版本,B分区升级至V2.0的新版本,则会面临:
 
(1)下次有V3.0的升级任务时,需要指定待升级的分区(A或者B);或者同时验证V1.0->V3.0和V2.0->V3.0,给升级任务和策略的制定带来一定的难度。

(2) 如果不指定升级的分区,则可能会导致分区版本的混乱,给FOTA的运营带来麻烦。

FOTA技术专栏—A/B升级 

FOTA技术专栏—A/B升级
小结


虽然A/B升级能够提高升级的健壮性和鲁棒性,增强用户体验。但是对设备的存储容量要求会比传统升级方式要大得多。随着智能控制器芯片和存储成本的日益高涨,成本问题同样需要主机厂仔细斟酌平衡。
 
下期,专栏会来到FOTA云端,讨论云端的服务架构。

往期精彩:
FOTA技术专栏—UDS刷写



作者 | 18号线不到安研路
初心 | 记录生而为人的证据,分享工农阶层原创作品,聚焦智能网联与人情冷暖。
声明 | 本文部分文字及图片资料取自网络,如有侵权,请联系平台进行修改或删除;文章属于作者本人,仅代表个人观点,不代表平台立场,如有不妥,也请联系平台修改或删除;本文不作任何商业用途。

原文始发于微信公众号(十一号组织):FOTA技术专栏—A/B升级

版权声明:admin 发表于 2022年7月2日 上午9:09。
转载请注明:FOTA技术专栏—A/B升级 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...