什么是bootloader?

百度百科解释:
Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。
这和汽车嵌入式开发多少有点不一样
ISO14229中的给出的程序执行流程:

由上图可知,一个ECU包含了三部分 Boot Manager、Application Software以及Boot Software,其中Boot Software由Boot Manager和Reprogramming Software组成,在汽车嵌入式中,我们常说的bootloader就是Boot Software。

为什么要用bootloader?

我们先假设这样一个场景:车辆某个ECU只有Application Software,由于某种故障导致该ECU的Application Software异常,进而导致车辆故障,不能使用。既然属于Application Software问题,软件工程师修复好Application Software以后,重新将Application Software刷写进该ECU即可。问题来了:怎么将修复好的Application Software刷写进该ECU?

为了解决这个问题,Bootloader应运而生,即:Bootloader是为更新Application Software而存在。既然是为更新Application Software而存在,Bootloader就没有必要时常更新。当车辆下线以后,Bootloader就固化在ECU指定内存区,不做更新,而Application Software可能会因用户的需求存在升级的可能。

Bootloader如何更新App Software

1、程序上电流程

了解Bootloader如何更新Application Software之前,我们需要先了解程序上电的执行流程。

如“图1 Application与Boot Software交互”所示:当ECU上电或者程序复位以后,最先执行Boot Manager代码,在这个过程中检查一下Application程序更新标志:ProgrammingRequest,判断一下Application是否请求升级。如果Application没有请求升级,那么再判断一下ApplicationValid标志,看看Application程序是否有效,如果有效就跳转到Application程序,即Application的主程序(main函数)。注意:如果是多核系统,跳转到core0_main()主程序,如果是单核系统,跳转到单核的main()程序;如果Application请求升级,程序跳转到Reprogramming Software,此时开始,Reprogramming Software对Application Software进行升级。

多核系统补充:以英飞凌tc397为例,其包含6个核,1个主核与5个从核。为了区分每个核的应用程序主函数,用户可以自定义应用程序主函数名称,示例:

void core0_main (void);
void core1_main (void);
void core2_main (void);
void core3_main (void);
void core4_main (void);
void core5_main (void);

2、Application Software程序升级步骤

对于汽车ECU的Application Software升级,OEM几乎都是遵循UDS规范。

Application Software程序升级主要分为三个阶段:Pre-Programming Step、Programming Step、Post-Programming Step

2.1、Pre-Programming Step


此阶段的主要​做一些Application Software升级前的检查,确保正式升级Application软件之前,车辆工况的安全性。这里举几个常见的检查条件:车速、诊断电压、KL15信号有效性等。

车速:约束车速<3Km/h,也就是说不允许车辆行驶过程中进行软件升级。
诊断电压:诊断电压会约束在一定的范围,比如:9V~16V,避免升级过程中,因电压过低或者过高导致刷写失败。
KL15信号有效性:为了确保收到的信号质量,一般会检查这个信号的有效性(Valid or Invalid),有效的信号才能确保升级过程中的稳定性。

当然,每家OEM的条件检查可能有所区别,但是,都为一个目的:安全。

2.2、Programming Step

经过了前面车辆工况的安全检查,此时可以进行Application Software的软件升级。Application Software的软件遵循UDS协议,主要流程如下:

**Step1:**进入编程会话,只有特定的工况下(编程会话)才能进行Application Software升级。
**Step2:**进行安全检查,通过OEM指定的算法进行Key的比对,主要是确认操作人员的合法性。就好比每个人只有自家的钥匙,自家的钥匙只能打开自家的门,而不能打开别人家的门一样,也就是Key的唯一性。
**Step3:**写指纹信息,比如Application程序的软件版本号等。
**Step4:**此过程将Flash Driver下载到ECU中,为擦除旧的Application Software做准备,确切说是下载内存擦除例程(memory erase routine)。一般Flash Driver不会放在ECU内部,担心程序异常跑到Flash Driver位置,将有效的Application擦除,所以,Flash Driver只有在Application程序升级时下载到ECU的RAM区。
**Step5:**检查Flash Driver的有效性,只有Flash Driver成功下载,之后的Application程序擦除和更新才能成为可能。
**Step6:**执行旧Application程序的擦除。
Step7Step8**:与**Step4Step6功能类似,这里是下载Flash Driver的内存编程例程(memory programming routine)。在实际项目中,Step4~Step8就是Flash Driver的下载,包括memory erase routine和memory programming routine。
**Step9:**刷写新的Application Software到ECU。
**Step10:**更新Application Software以后,需要检查下载数据的完整性,确保数据可靠。

**Step11:**检查Application Software的有效性,比如签名(signature)是否正确等。

**Step12:**写配置信息,比如车辆VIN等。

2.3、Post-Programming Step

此阶段主要是Application Software更新后的网络恢复,即:Application Software更新好以后,重新参与工作。

常用的做法就是执行ECU Reset,也可以让诊断刷写的S3时间超时,程序重新复位。

物联沃分享整理
物联沃-IOTWORD物联网 » 什么是bootloader?

发表评论