单Bootloader 模式程序升级的方法

2024-02-01 17:23潘文卿李国朋张鲁兵
汽车电器 2024年1期
关键词:校验应用程序升级

潘文卿,李国朋,张鲁兵

(潍柴动力股份有限公司,山东 潍坊 261061)

嵌入式程序主要包含两部分,一部分是用来更新应用程序的引导加载程序,即Bootloader程序,简称Boot程序;另一部分是用于实现控制逻辑的应用程序,简称APP程序。随着客户需求的多样性和智能化,应用程序不断地迭代升级的同时,Boot程序也需要升级,本文介绍单Boot模式下程序运行和升级的方法,包括Boot程序的升级。

1 Bootloader的相关概念

Bootloader就是在操作系统内核运行之前运行的一段程序,初始化硬件设备,建立内存空间的映射关系,从而将系统的软硬件环境带到一个合适状态,以便最终调用操作系统内核,做好正确的环境[1]。Bootloader是依赖于硬件而实现的,特别是在嵌入式系统中,所以需要构建一个具有适用性、安全可靠的架构。

Bootloader是所有支持重编程的ECU必须具备的软件功能,在ECU运行中,执行的是应用程序和数据实现客户要求的控制逻辑,比如发动机转速控制。只有在ECU应用程序和数据需要更新时才会运行Bootloader软件。BootLoader可以实现应用程序和应用数据同时更新或者单独更新,应用数据也可以全部更新或根据分区不同进行部分数据更新。传统意义上BootLoader无法再更新,除非拆件,用调试器进行全区刷写,但是现在随着主机厂的需求不断提升,要求Bootloader也要具备迭代更新的功能。

2 Bootloader运行模式

2.1 Bootloader功能

Bootloader除了具备更新应用程序的功能,还需要具备以下功能。

1)安全保护措施:刷写之前进行UDS服务中的0x27服务,通过seed&key形式进行安全校验,用特定的算法基于seed计算key,进行比对,比对通过才可以进行后续的刷写流程,否则停止刷写,保证ECU免遭恶意编程动作影响。

2)编程安全条件校验:在刷写之前首先保证车速,转速为0的停车情况下才可以进行刷写控制流程,以保证车辆安全。

3)完整性校验功能:程序在跳转到应用程序之前要校验一下当前刷写到Flash中的应用程序是完整的,否则停止跳转,停留在Bootloader中。

4)一致性检查:验证软件兼容性,检查程序一致性,包括应用软件与Bootloader软件,应用软件与应用数据校验,如果不一致,程序会发生复位,在复位次数达到一定程度时会自锁在Bootloader中。

2.2 刷写流程

ECU上电或复位后,首先执行Bootloader程序,进行软硬件映射关系检查,然后检查外部刷写请求标志位。

1)如果有刷写请求,外部刷写请求标志位,此时即便应用程序完成完整性检查和一致性检查,结果是通过的,也不会跳转出Bootloader,Bootloader会继续执行后面的刷写流程。

2)如果外部刷写请求标志位无效,继续检查应用软件完整性标志位。

3)如果应用是完整有效的,程序会跳转到应用程序的开始位置,开始执行应用程序。

4)如果应用软件是不完整或者无效,ECU停留在Bootloader中运行。

图1描述了Boot程序运行和App程序跳转,在Boot和App中分别刷写的过程。刷写流程遵循UDS统一诊断服务协议。

图1 Boot运行和刷写流程

3 更新Boot程序

当随着控制程序不断升级的同时,Boot程序也会遇到升级的需求,单Boot模式下升级Boot程序有两种方案。

1)利用APP空间升级:在APP 地址段内开发一段BootPlus程序,专门刷写Boot程序的一段代码,先用Boot程序将BootPlus刷写进去,然后跳转到BootPlus,在Boot-Plus 程序中将最新的Boot程序刷写进去,然后再用新的Boot程序刷写App程序。更新过程如图2所示,在此过程中需要有2套上位机引导程序,分别是Boot程序更新APP地址区间的引导程序和BootPlus更新Boot地址区间段的引导程序,其中Boot程序更新APP的引导程序可以释放整车厂或者是主机厂;BootPlus更新Boot地址区间的引导加在程序中因涉及到Boot程序更新,权限是最高的,应管控在开发者范围内,不允许外部任何其他人员有更新Boot程序的权限,以保证程序数据安全。

图2 单Boot模式下程序升级

2)利用额外Flash或者RAM升级:利用额外的Flash空间,运行原有的Boot程序,将新的Boot程序更新到额外的Flash中,重新运行新的Boot程序,更新老的Boot程序,然后重新运行Boot程序,破坏额外的Boot程序或者更新标记位。

从两种方案中,可以看出都是利用一段异于Boot程序的地址空间,刷写一段能更新Boot程序的程序,将Boot程序更新,然后再用新的Boot程序更新应用程序。

这两种方案在更新过程中都需要做好安全校验,以保证刷写过程中的安全性,包含刷写过程中的0x27服务的seed&key安全校验,以及刷写完毕后的程序数据完整性安全校验。

4 结论

本文以嵌入式系统程序升级为例,因空间分配或架构设计的原因,只能单Boot程序进行,随着功能的不断完善,Boot程序会有更新的需求,当单Boot程序下,有Boot程序更新需求的情况下,就需要利用其它空间进行间接升级。本文中的两种方案都是利用了这一原理,其中方案1是普遍采用的一种方案。为保证控制器内程序和数据的安全,Boot程序的更新只保留在开发者权限范围内,并通过高级别的加密算法进行高效校验,保证程序和数据的安全。

猜你喜欢
校验应用程序升级
小投入,大升级 Polk Audio Monitor XT系列
幸福,在“家门口”升级
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
回暖与升级
炉温均匀性校验在铸锻企业的应用
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
锅炉安全阀在线校验不确定度评定
三星电子将开设应用程序下载商店