七天征服Bootloader开发- 第0课(概述)

发布时间:2026/9/12 10:20:25

七天征服Bootloader开发- 第0课(概述) 前言在2个月前Bootloader开发对我来说犹如天花板一样的存在高高在上就像睥睨众生的撒旦在天上呼吸着稀薄的空气可望而不可即令基础软件开发的人们望而却步但这2个月走来从新的工具链使用开始到APP程序下载成功后一连串的绿色对号我惊讶的发现Bootloader开发被神话了其实难度没有那么大有过一次经历之后7天开发一个Bootloader问题不大。UDS学习套件暨便携式UDS诊断服务端我已经把这套Bootloader和使用的UDS协议栈集成到这个小ECU中用于实习UDS和Bootloader刷写流程非常适合汽车电子初学者。BOOT不神秘先别害怕我们对比一下BOOT和APP的异同压压惊Bootloader与普通App的对比BOOTAPP启动代码有有链接文件有有中断有有内核驱动有有外设驱动有有入口地址跳转有--Data Flash有有Self-Programming(Code Flash)有--多核同步--[有]看上表Bootloader并没有什么什么神秘的地址跳转这一块就三行代码的工作量通过一个函数指针跳转到一个固定的偏移地址如0x20000。相比APP开发唯一的难点就是Self-Program(即对自身ROM的擦写)如果你的程序可以对Code/Program Flash擦/写那就可以改造成Bootloader了就这么简单。大量代码可参考我们在设计顶层架构的时候本着将可移植性最大化的原则来设计Bootloader这样就能在日后开发新的Bootloader时照搬很多很多 -- 这就是7天征服Bootloader的基础。博主身边还真有大神(至少2位)在7天之内搞定Bootloader开发。是不是很担心UDS这一块认为这是个大头--现身说法的讲事实正于此相反网上关于BOOT的UDS协议栈很多随便下载一个做一下裁剪和适配即可并不需要完全从零做起。我们只造车不造轮子UDS这一块是纯软件的一个标准完全脱离硬件TC397上面的UDS和TC275上面的UDS是完全一样的。而完全一样的UDS对底层的命令也是完全一样的所以HAL部分的接口也不因硬件改变而改变。在HAL之下部分MCAL标准接口实现的功能也不用变。下图中未蒙版的模块即为可重用的部分。 可见做好软硬件的解耦后开发一款新的Bootloader只需要配置/手写底层的MCAL外加一个简短的时间片OS即可。软件架构不复杂简单说一下我做的Bootloader1. Timer模块主要为OS(时间片)提供定时同时该Timer还可以用来实现UDS协议中的时间参数N_xxBS STminS3Server...2. OS在Timer的基础上定时的调用任务为各个函数的执行提供了触发条件。3. MCAL模块为实现Bootloader所需功能做的底层驱动。4. HAL模块作为UDS和底层驱动之间的桥梁。它对于日后的移植至关重要UDS需要的硬件操作全都面向HAL而不面向MCAL一是软件结构清晰二是实现软件上的UDS协议与硬件的解耦为可移植性提供实现基础。日后开发新的Bootloader的时候保持HAL里面的接口不变只将接口内函数做修改(甚至有些使用MCAL标准接口做的函数也不用动因为MCAL也是标准的啊).5. MINI-UDS协议栈该模块从CAN的RX回调函数中获取总线数据并将RAW数据解析成UDS命令MINI-UDS模块因为不面向硬件所以这一块如果设计的好了可以实现100%的移植工作目标很明确总结起来开发Bootloader工作就这么几步1. 启动代码在main()函数之前初始化中断向量表RAM通用寄存器等-- 保证程序能进入main。2. 链接文件Ld/Lsl文件因为Bootloader对程序跳转地址和所在ROM区域都有严格要求所以必须通过链接文件将Bootloader所用的资源划分好保证Boot不被APP程序覆盖并且在Code Flash进行数据擦写的时候一部分代码要运行在RAM中就需要通过链接文件指定其地址。3. OS编写。手写代码/MCAL配置GPT/STM实现一个短小精悍的OS-- 保证任务都能如期执行。4. MCAL配置最先要使用的是CAN模块保证能从总线收/发数据。CAN的RX回调函数中触发数据读取然后传给UDS协议栈解析。Port/Dio是为控制MCU复位用的CanTrcv的驱动也有可能会用到。看门狗这个就不用说了。CRC则是用来在下载过程和下载完成之后进行数据校验的。升级过程中数据是总线-RAM-ROM,而Code/Program Flash用来将代码保存到ROM中Data Flash则是用来将数据(2E服务要写入的数据或APP完整性标志)保存到MCU里的。可以说Bootloader开发中最大的幺蛾子往往就出在Flash这一块。SPI则是为一些复杂的CAN Trcv驱动准备的。5. HAL开发。所有对底层的操作都在此做了封装。保证MINI-UDS能正确操作硬件。6. MINI-UDS协议栈开发。将CAN总线上的命令/数据解析出来。向上经CAN总线发送UDS响应向下传递数据到Flash/传递指令到MCAL其他模块。学习计划我已经把这套Bootloader和使用的UDS协议栈集成到这个小ECU中用于实习UDS和Bootloader刷写流程非常适合汽车电子初学者。未来个把月我会逐步把每一个环节的开发过程以及踩过的坑写出来。并将我在网上下载的英飞凌TC2xx的UDS协议栈作为base来深入剖析从UDS入门结合Bootloader设计需求深刻掌握Bootloader设计思路从而流水线式Bootloader开发。为日后的职业生涯积累筹(jia)码(xin)。入门篇课程难度七天征服Bootloader 开发- 第1课启动代码和链接文件★★★★★七天征服Bootloader 开发- 第2课STM驱动和时间片OS开发★★七天征服Bootloader 开发- 第3课CAN模块MCAL配置★★七天征服Bootloader 开发- 第4课Flash固件库集成★★★★★七天征服Bootloader 开发- 第5课MCAL其他模块配置★★七天征服Bootloader 开发- 第6课HAL硬件抽象层开发★★★七天征服Bootloader 开发- 第7课UDS协议栈移植★★★精通篇课程难度七天征服Bootloader 开发- 第8课UDS之TP层开发报文获取、拆包、打包★★★★★七天征服Bootloader 开发- 第9课UDS之Timer的开发★七天征服Bootloader 开发- 第10课UDS之10_11_22_2E服务开发★★★七天征服Bootloader 开发- 第11课UDS之27服务开发★七天征服Bootloader 开发- 第12课UDS之31服务开发★★★★七天征服Bootloader 开发- 第13课UDS之34_36_37服务开发★★★七天征服Bootloader 开发- 第14课 软件下载流程和程序跳转逻辑★★★
延伸阅读

更多相关文章

2026/9/12 10:20:25

MiniMax批量导出实战指南:浏览器插件与Python自动化方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 10:20:25

OpenCode源码解析:从Agent循环到Skills与LSP的完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 10:20:25

用Python打造交易策略执行路径可视化,防守日复盘+1.73%的秘诀

开盘前我盯着昨晚的外盘数据和今天的竞价量能,第一反应是:今天不适合进攻。结果收盘一看,账户定格在1.73%。这个数字在顺风局里不值一提,但在一个需要防守的交易日里,算是一笔“守出来”的收益。这轮操作里最有价值的其…

2026/9/12 11:05:30

CYW240128与FPGA协同调试实战:SPI通信、DMA驱动与信号完整性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 11:05:30

交易规则构建与执行:从行为约束到稳定盈利

1. 交易规则的本质与价值十年前我刚踏入交易市场时,和大多数新手一样沉迷于寻找"圣杯指标"。直到连续爆仓三次后,我才真正理解华尔街那句老话:"市场会变,人性永不变"。EagleTrader交易室墙上挂着的那句"…

2026/9/12 11:05:30

大语言模型(LLM)技术解析与实践指南

1. 大语言模型入门指南:从零基础到技术实践 作为一名长期关注AI技术发展的从业者,我见证了大型语言模型(LLM)从学术研究到产业应用的完整历程。这篇文章将系统性地介绍LLM的核心概念、技术原理和实践方法,帮助不同基础的读者建立完整的知识框…

2026/9/12 11:00:29

榆林本地营销策划公司怎么选?一套可落地的筛选框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码