• 816查看
  • 0回复

[应用层软件] 谈谈Bootloader自更新

[复制链接]


该用户从未签到

发表于 29-8-2023 13:33:07 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


汽车控制器的BootLoader(下文简称Boot)主要作用是更新App程序。以往在不打开控制器的情况下,是无法更新Boot。随着主机厂对车上各控制器要求实现OTA功能,App备份、Boot自更新的需求也随之到来。
App备份和Boot自更新是两个重要的功能,接下来主要先来梳理一下Boot自更新。
01.
Supplier Boot(SB) + Customer Boot(CB)通常情况下,供应商都有自己的平台软件,包括Boot和Appl。而各主机厂都有自己不同的软件升级规范,为了适配主机厂的需求,通常的做法是加一层Customer Boot来实现客户的需求。那软件的运行顺序就是SB->CB->Appl,如图1所示。这种做法可以简单、快速的满足CB也可以更新。
谈谈Bootloader自更新w1.jpg
图1 SB+CB的升级方式(来源网络)不过这种方式,通常情况下通过SB更新CB是通过供应商自己定义的升级流程,并且通过自己的上位机来实现升级。也就意味着这种方式只适应项目开发阶段,因为供应商的升级流程无法接入到整车的OTA流程。这种方式的优点就是简单,能很快地适配客户的需求,而且即使面向不同的客户,只需要简单的更改CB就可以满足需求,适应性比较好。但是缺点就是会浪费Flash空间。
02.
将Boot先放到RAM中运行,然后更新Boot的Flash区域这种方式只需要一份Boot,其具体方案是,在Boot的链接文件中,将程序和数据映射到特性的RAM空间,然后在控制器上电时,首先将Boot的代码和数据搬运到RAM中,程序运行在RAM中,当收到更新Boot的需求时(这里需要上位机在发送更新指令的时候,区别是更新Boot还是App,比如通过在0x31服务写入不同的标志位进行区分),通过RAM中的程序以及上位机下载的Flash Driver,将Boot的Flash区域进行更新。

谈谈Bootloader自更新w2.jpg

图2 方案二这种方式的优点就是节省Flash空间,而且如果客户想把Boot自更新的功能保留到量产之后,也是可以的,因此控制器的升级是完全遵循主机厂的要求的。不过这种方式有个缺点,就是在更新过程中,不能断电,一旦断电,控制器就会变成板砖,需要换件。另外程序运行在RAM中,对踩内存这种行为更加敏感。不过在整车上,出现意外断电的情况应该很少。首先升级之前会检查低压蓄电池的电压水平,甚至对新能源车来说,可以启动DCDC,来保证12V的稳定供应。
03.
两个CB+minBoot这种方案下,有两个CB和一个miniBoot,miniBoot的作用很简单,就是根据引导区的标志位来决定切换到哪个Boot。
其具体的运行方式是,当软件收到Boot更新指令时,软件复位,首先跳转到miniBoot,在miniBoot中,根据引导区标记(标记所需运行的Boot号,比如1代表Boot1,2代表Boot2)跳转到相应的Boot,假设当前运行是Boot1,在Boot1中根据刷新指令,将Boot2的Flash区域进行更新,更新完之后,将引导区标记写为2,然后软件复位,那么下次运行的时候就会切换到Boot2运行了。
谈谈Bootloader自更新w3.jpg

图3 2个CB+miniBoot方案

种方案的优势就是可以保证刷新过程中断电不会导致控制器变成板砖,而且也可以在SOP之后继续使用。缺点也很明显,空间占用率比较大,软件复杂,需要三个Boot。

04.
小结
三种方案中,简单来说分为两类,其中一类是依赖一个启动Boot来切换到CB的,方案一和方案三都是这种思路,只不过方案三将Supplier Boot进行了简化,作用仅仅是一个跳转。第二类是将Boot放到RAM中运行,然后更新自己的Flash区域,这种的致命缺陷就是更新过程中不能断电。

另外三种方案中都需要对现有的Boot方案进行改进,共同点就是必须增加一个流程,来确定是更新Boot,还是更新App,这里就需要在升级流程中增加一个步骤,比如是0x2E服务,写入升级的标志位,在跳转到Boot后,再识别该标志位来确定是更新Boot还是App。

对于方案三而言,还需增加切换引导区标志位,用来确定当前当前所需运行的Boot,另外由于这些参数很敏感,增加一些安全校验手段,来保护敏感数据也是必须的。




该用户从未签到

发表于 18-3-2025 03:08:00 | 显示全部楼层
针对所提的帖子,关于汽车控制器BootLoader的自更新功能,以下为回复:

BootLoader在汽车控制器中扮演着关键角色,主要负责更新应用程序。随着主机厂对控制器实现OTA(空中升级)功能的需求增加,Boot自更新功能日益重要。通常包括供应商Boot(SB)和客户Boot(CB)。考虑到各主机厂的软件升级规范不同,采用添加客户Boot层的方式,可以适配不同主机厂的特定需求。这一设计可实现更灵活的软件更新策略,确保系统安全、可靠地运行。Boot自更新功能是实现软件持续迭代与优化的重要手段,对提升车辆智能化水平具有重要意义。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 04:02 , Processed in 0.332494 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.