【车载开发系列】BootLoader相关概念

本文详细介绍了车载开发中的BootLoader概念,包括其在汽车ECU中的作用,FBL(FlashBootloader)的结构,运行时点,以及BootLoader的启动模式,重点强调了它在软件更新过程中的关键角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【车载开发系列】BootLoader相关概念

一、Bootloader概念

bootloader是一段固化在放在FLASH中的程序加载代码 ,连接底层硬件与应用程序。它是嵌入式系统在加电后执行的第一段代码。在完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。

二、汽车ECU中的Bootloader

ECU是MCU的一种,一般用在汽车上。ECU经常会用在汽车零部件中,零部件密封性等要求都比较苛刻,并且装车,如果想取下零部件可能需要将车拆解才可以做到,这种行为是不被允许的,成本极高,操作复杂,因此大多主机厂商要求ECU具有升级功能,并且通过多年的积淀制定了行业标准UDS。
ECU开发过程要用到它来构建bootloader,上传和下载数据,即软件刷写,控制器Reset;测试时要用它来读写存储,控制外设;产线上,要用它来校准机械件,控制例程,进行下线执行器测试,刷新软件,配置防盗,读取号码,下线配置等。在行驶过程中,要用它来监测各种故障,并记下故障码;4S店里,技师需要读取当前故障、历史故障,读取故障发生时刻环境信息状态,清除故障,判断故障发生点,还可以用来升级ECU程序。

三、FBL的概念

FBL的全称是flash bootloader。它是用来更新刷写工具的。用于引导程序进入APP或者Secondary Bootloader,可以刷写SBL程序或者激活SBL,( 这个程序仅仅是出厂烧录一次,并且永不更新)
它是嵌入式软件和PC工具的组合,旨在通过总线协议(例如 CAN)对 ECU 软件进行刷新。因此 Flash Bootloader 分为 3 个部分,Bootloader、Flash Driver 和 Flash Tool。
在这里插入图片描述

四、BootLoader运行时点

BootLoader是驻留在ECU非易失性存储器(Nvm None Valitale Memory)中的一段程序代码,每次ECU复位之后,都会运行BootLoader。它会检查是否有来自通信总线的远程程序加载请求,如果有这个请求的话才会进入BootLoader模式。

五、Boot Software

在14229规范中的Boot Software等价于bootloader,它由两部分构成
1、boot manager:引导程序启动
2、Reprogramming Software:更新软件程序,主要更新App程序
一般情况下Boot Software(Bootloader)= Boot Manager+reProgramming Software

六、bootloader的作用

bootloader存在的意义就是更新App程序。主要功能是完成微处理器与周边电路正常运行的初始化工作,建立内存空间的映射,将系统的软硬件环境带到一个合适的状态,加载flash中的系统程序。

七、汽车ECU bootloader的作用

整车作为一个产品最终到消费者手里,如果客户要更新软件,不可能拆卸硬件去升级,一般去到售后或4s店,利用OBD接口或者OTA云升级APP,而这两种方式均依赖于Bootloader程序,如果Bootloader程序不可用,就会导致ECU不可用。

八、BootLoader的启动方式

大多数的BootLoader都有两种不同的操作模式:“启动加载模式”和“下载模式”。但是注意BootLoader的最终目的是启动内核,因此其实这两种并没有所谓的差别。

1.启动加载(boot loading)模式

上电后,BootLoader从板子的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户介入。这种模式是BootLoader的正常工作模式,产品发布时候,BootLoader就工作在这种模式下。

2.下载(downloading)模式

这种模式下,开发人员使用各种命令,通过串口连接或者网络连接从主机上下载文件,将他们直接放在内存运行或者烧入flash类固态存储设备中。以后的系统更新也会使用 Boot Loader的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。
对于串口通信的方式:使用xmodem/ymodem/zmodem 协议
对于网络通信的方式:使用tftp,nfs服务等

### FBL 的存储方式及其文件格式 FBL(First Bootloader),也称为 Primary Bootloader (PBL),是一种嵌入式系统的引导程序,通常在设备生产阶段一次性烧录到特定的存储区域中。以下是有关 FBL 文件格式以及其存储机制的相关信息: #### 1. **FBL 的存储位置** FBL 被设计为只读模式,在出厂前通过专用工具或编程器写入到不可擦除的存储介质中。这种存储介质通常是 PFlash(Program Flash)。PFlash 是一种非易失性存储器,即使断电也能保存数据[^2]。 由于 PFlash 中的数据不会因掉电而丢失,因此它非常适合用来存储像 FBL 这样的关键固件组件。此外,PFlash 提供了足够的安全性可靠性来防止未经授权的操作。 #### 2. **FBL 的文件结构** 尽管具体的实现可能有所不同,但大多数情况下,FBL 都遵循标准的可执行文件格式,例如 ELF(Executable and Linkable Format)或者 PE/COFF(Portable Executable/Common Object File Format)。这些格式定义了一个清晰的头部多个区段(sections),其中包含了代码、初始化数据以及其他元信息。 对于某些高度定制化的系统来说,可能会采用专有的二进制格式而非通用的标准格式。在这种情形下,开发者需要确保以下几点: - 头部包含必要的标志位以指示启动入口地址; - 各种区段按照预定顺序排列以便正确解析; - 安全校验措施如 CRC 或哈希值被加入以防篡改[^3]。 #### 3. **保护机制** 考虑到安全性问题,现代嵌入式平台往往会对 FBL 实施额外的安全防护策略。比如利用硬件信任根技术验证每次重启后的完整性;又或者是通过对敏感指令序列加密的方式阻止逆向工程尝试。如果发现任何异常情况,则立即停止后续操作并触发报警流程。 ```c // 示例:简单的CRC计算函数用于检测数据损坏 uint8_t calculate_crc(const uint8_t *data, size_t length){ uint8_t crc = 0; while(length--){ crc ^= *data++; for(int i=0;i<8;i++) { if(crc & 0x80) {crc <<=1; crc ^=0x7;} else{crc<<=1;} } } return crc; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值