什么是bootloader?_bootloader是什么-程序员宅基地

技术标签: 汽车  汽车ECU开发与学习  mcu  

什么是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程序的擦除。

**Step7和Step8:**与Step4和Step6功能类似,这里是下载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时间超时,程序重新复位。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/muyouzhutian/article/details/127504996

智能推荐

xray了解-程序员宅基地

文章浏览阅读7.5k次。xray了解文章目录xray了解一、xray是什么?二、xray的特性三、xray能检测的漏洞类型四、设计理念五、简易架构1、来源处理2、漏洞检测3、结果输出一、xray是什么?xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成。二、xray的特性检测速度快。发包速度快; 漏洞检测算法高效。支持范围广。大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均可以支持。代码质量高。编写代码的人员素质高, 通过 Code Review、单_xray

PTA刷题日记04_pta找不到#include<bits/stdc++.h>-程序员宅基地

文章浏览阅读148次。1035 Password (20 分)这辈子没这么无语过的一道题,我一直错一个点,看了半天才发现还有单复数,真的你搁这搁这呢#include<bits/stdc++.h>using namespace std;vector<int> ans;string id[1005], pwd[1005];int main() { int n; cin >> n; for(int i = 0; i < n; i++) { bool f = 0; c_pta找不到#include

城市名字 按a-z排序_1348 城市名字排序csdn-程序员宅基地

文章浏览阅读1.3k次。[{“initial”: “A”,“list”: [{“code”: “0997”, “name”: “阿克苏”, “pinyin”: “Akesu”, “label”: “Akesu0997”, “latitude”: “41.10”,“longitude”:“80.15”}, {“code”: “0837”,“name”: “阿坝”,“pinyin”: “Aba”,“label”..._1348 城市名字排序csdn

sudo install 出现:【警告】:下列软件包不能通过验证!_下列软件包不能通过认证-程序员宅基地

文章浏览阅读8.2k次。sudo apt-get update_下列软件包不能通过认证

Chromium为视频标签<video>全屏播放的过程分析_video是怎么全屏展示的 原理-程序员宅基地

文章浏览阅读6.2w次,点赞8次,收藏15次。在Chromium中,标签有全屏和非全屏两种播放模式。在非全屏模式下,标签播放的视频嵌入在网页中显示,也就是视频画面作为网页的一部分显示。在全屏模式下,我们是看不到网页其它内容的,因此标签播放的视频可以在一个独立的全屏窗口中显示。这两种截然不同的播放模式,导致Chromium使用不同的方式渲染视频画面。本文接下来就详细分析标签全屏播放的过程。_video是怎么全屏展示的 原理

33、Java 异常掌握这些就够了(图解 Java 中的异常)_java异常分类图-程序员宅基地

文章浏览阅读5.2k次,点赞84次,收藏137次。 写代码会遇到各种各样的错误:️ ① 语法错误(会导致编译失败,程序无法正常运行)️ ② 逻辑错误(比如需要进行加法操作时,不小心写成了减法操作)️ ③ 运行时错误(程序运行过程中产生的意外,会导致程序终止运行) 若希望开发者重视这个异常、认真处理这个异常,则自定义检查型异常 创建一个类(异常类),并继承 Exception 即可创建一个自定义的检查型异常 检查型异常使用起来比较麻烦(相对非检查型异常来说)_java异常分类图

随便推点

黑马程序员java教程最新工作流引擎Activiti7基础到进阶,Activiti和Spring框架、SpringBoot整合demo 的sql_黑马activiti项目sql-程序员宅基地

文章浏览阅读4k次,点赞22次,收藏29次。/*Navicat Premium Data TransferSource Server : MysqlSource Server Type : MySQLSource Server Version : 50703Source Host : localhost:3306Source Schema : actdemoTarget Server Type : MySQLTarget Server Version : 50703Fi_黑马activiti项目sql

linux设备驱动_open(struct inode *inode, struct file *file)-程序员宅基地

文章浏览阅读4.8k次。这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂: Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!一.Linux设备分类字符设备: 以字节为单位读写的设备。块设备 : 以块为单位(效率最高)读写的设备。网络设备 : 用于网络通讯设备。字符设备: 字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序 来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和w..._open(struct inode *inode, struct file *file)

torch.repeat 张量维度复制_torch复制张量-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏10次。torch.repeat 用于张量的制定维度复制import torcha = torch.rand(2,3) # 如果 a 是 feature vector, 则 batch=2(dim=0), channels=3(dim=1)b = a.repeat(2,1) # 在 batch(dim=0) 维度上复制 2 次,在 channel(dim=1) 维度上复制 1 次# 即 repeat 的参数为其维度的复制次数,第 1 个参数表示对第 0 dim 的重复次数,依次类推#####_torch复制张量

计算机系统中为何采用层次化存储体系,计算机组成原理与体系结构——层次化存储结构...-程序员宅基地

文章浏览阅读6.5k次,点赞2次,收藏7次。1. 简介存储层次是在计算机体系结构下存储系统层次结构的排列顺序。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量。大部分现今的中央处理器的速度都非常的快。大部分程序工作量需要存储器访问。由于高速缓存的效率和存储器传输位于层次结构中的不同档次,所以实际上会限制处理的速度,导致中央处理器花费大量的时间等待存储器I/O完成工作。2. 分类由上图可知: (1)层次化的存储结构可以分为:CP..._计算机系统中采用层次化存储体系结构的目的是什么?

CCF_Java_201412-1_门禁系统_java 201412-1-程序员宅基地

文章浏览阅读128次。时间限制: 1.0s内存限制: 256.0MB问题描述涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。输入格式输入的第一行包含一个整数n,表示涛涛的记录条数。第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。输出格式输出一行,包含n个整数,由空格分隔..._java 201412-1

ElasticSearch中distinct、count和group by的实现_elasticsearch count(distinct (`address`) )-程序员宅基地

文章浏览阅读904次。原文地址https://www.jianshu.com/p/62bed9cc83491 - distinctSELECT DISTINCT(user_id) FROM table WHERE user_id_type = 3;{ "query": { "term": { "user_id_type": 3 } }, "collapse": { "field": "user_id" }}{ ... "hits": { "hi_elasticsearch count(distinct (`address`) )