不用工具,合并 bootloader 和 APP 文件就是这么简单!

来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID   :emOsprey

只要你经历过稍微复杂一点的项目,一般都会要求 BOOT 和 APP 两个程序,即是为了方便客户功能升级,也是为了咱自己解 BUG,所谓好处多多。

刚毕业那年,鱼鹰接手的项目中就需要 BootLoader,为此,鱼鹰写了几篇相关的笔记《固件升级经验总结》《STM32固件升级之基础知识(一)》(关注公众号,菜单栏中有合集,或点击蓝色字体查看)。

这里面介绍的升级知识不管对初学者还是有经验的道友来说,都有一定的参考价值。特别是里面对一些特殊要求的处理,更有巧妙的设计(比如最后才更新 APP 前 8 个字节,比如传参等问题)。

今天鱼鹰继续介绍如何合并 BOOT 和 APP 两个程序,方便一次下载。

在网上,有各种各样的合并方法,有通过 J-flash 工具的,有通过写入单片机再读回来的,有自己写合并程序的,或者鱼鹰介绍的专业工具 《功能强大的 HEX 开源转换工具,你值得拥有》,可谓八仙过海,各显神通。

以上方法大部分方法都要使用工具,或者过程繁琐。那么有没有一种快速、简单、方便的不需要借助工具的合并方法呢?当然有了。

今天鱼鹰就介绍这个史上最简单的方法(这可是老工程师传授的技巧):

手工法

1、复制bootlaoder 的 HEX 文件后用记事本打开;

2、删除最后一行(一般是 :00000001FF);

3、打开 APP 的HEX 文件;

4、复制所有 APP 文件的内容,粘贴到第二步文件修改后的 Boot 文件末尾。

5、保存修改后的 boot 文件,这个就是合并后的文件了。

971490375180ffcb9f13c70380d1bf23.png

搞定!!没有借助任何工具(记事本算不?),在没有工具的情况下,最快的解决方案!!!

自动法

既然只是对文件的删除、追加操作,我们完全可以用脚本代替,所以鱼鹰写了一个非常非常简单的脚本,帮助我们自动完成上面的操作(本来想用windows 的批处理,可惜太菜了,搞不定,只能用 shell 了,如果有道友会这些操作,欢迎留言,这样就更简单了)。

第一步,先安装 git bash,这个工具应该开发人员基本都安装了才是,就如 MDK 一样,毕竟 git 这么火。

然后献上鱼鹰编写的脚本:

#!/bin/bash
#"C:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh"  # MDK 中执行的命令


boot_name_file_hex=./bootloader.hex          #  BOOT 文件所在位置和名称
app_name_file_hex=./Objects/app.hex           #dir_file_name_hex=`find ${app_dir_file_hex} -name "*.hex"`
boot_app_name_file_hex=./mege-app-boot.hex 


cp ${boot_name_file_hex}  ${boot_app_name_file_hex}     # 复制新文件 boot 文件
sed -i '$d' ${boot_app_name_file_hex}               # 删除最后一行
cat ${app_name_file_hex} >>  ${boot_app_name_file_hex} # 追加文件

将上面的文件保存为 boot_app.sh ,然后把它放在工程文件同级目录下,比如这样:

8312523e1d1546fb077da1a341f062f8.png

最后工程配置一下:

1

2b62c44237fbce7f3b70c6051dafdff1.png

2

设置命令(在上面的文件开始处已注释)

"C:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh"

af303feca8f6b32a263405305cb05212.png

注意上面 "C:\Program Files\Git\bin\sh.exe"  路径和自己安装的 git 工具有关可以自行修改,boot  和 app 文件名也是如此。

完成以上操作后,编译后就会自动在工程目录下生成 mege-app-boot.hex 文件,这就是你要的合并文件了(名字可以随意取)。

关于如何下载

既然说不要工具,有种下载也不用 j-flash 或 STM32 ST-LINK Utility 呀!

安排上:《如何使用 KEIL 下载 HEX 文件?

这样不就一条龙服务了嘛,从如何制作 bootloader 到如何合并 到下载,大功告成。

关于如何优化更新

其实使用调试器更新固件还是挺麻烦的,有没有更简单、更傻瓜的操作呢?

当然有,那就是一键拖曳烧录,就像拷贝文件一样简单,这个估计很多人有了解,也可能实现过,鱼鹰对此也挺感兴趣的。后期有时间鱼鹰也去搞搞,争取开源一个让大家都学习一下,对此感兴趣的话,欢迎关注鱼鹰呐。

如果今天的笔记对你有所帮助,欢迎转发、点赞支持鱼鹰,这是鱼鹰更新的动力。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 合并STM32的bootloaderapp程序需要两个步骤:首先是生成bootloaderapp程序的二进制文件,然后是将它们合并成一个二进制文件。 生成二进制文件有很多种方式,可以通过Keil、IAR等集成开发环境自动生成。也可以使用GCC编译生成Hex格式的文件。在这里,我们以使用Keil为例: 1. 配置bootloaderapp程序的工程文件,包括源代码、头文件和库文件等。 2. 进行编译和连接,生成.hex或.bin格式的文件。对于Keil,这些文件可以在Project\Obj目录下找到。 3. 复制bootloaderapp程序的.hex或.bin文件到一个临时文件夹中。 合并二进制文件的过程大致如下: 1. 打开一个二进制文件编辑器,例如HxD、HEXplorer等。在这里,我们以HEXplorer为例。 2. 打开要合并bootloader.hex文件,复制其中数据的部分(从“:”到本行结束),然后打开要合并app程序.hex文件,将该数据添加到文件的末尾。 3. 如果app程序的ENTRY地址与bootloader程序的ENTRY地址不同,则需要修改数据块中的START地址。例如,如果bootloader程序ENTRY地址为0x08000000,而app程序的ENTRY地址为0x08004000,则需要将数据块中的START地址修改为“:200000005C0000000C00000010040000D4”(0x08000000+0x4000=0x08004000)。 4. 保存文件,将其烧录到STM32芯片中即可完成合并。 总之,合并STM32的bootloaderapp程序需要先生成二进制文件,然后通过二进制文件编辑器将它们合并成一个文件,并进行修改和调整。最终保存、烧录到芯片中即可。 ### 回答2: 在STM32芯片中,通常有两个不同的程序:Bootloader和应用程序(App)。Bootloader程序位于芯片的Flash中的特定地址,它是专门用于更新应用程序的程序。App程序是实际的应用程序,它在Flash中的不同地址处。 合并BootloaderApp程序可能是为了减少系统的存储器占用率,提高系统性能,增加自由度等许多因素,那么接下来,我将向您介绍如何将这两个程序合并在一起。 首先,需要确定App程序中是否有与Bootloader重叠的代码。如果有,则需要将这些代码移动到没有重叠的位置。其次,需要尝试新的链接脚本,以确保两个程序可以正确地链接在一起。 接着,将两个程序合并为单个Bin文件。确保App程序添加到Bootloader程序的完整程序中。最后,将应用程序的入口点设置为Bootloader程序的入口点,以便引导程序直接运行应用程序。 在合并BootloaderApp程序之前,需要确保所有的代码、文本、数据段、BSS段等在Linker脚本中都被合并。如果两个程序之间存在代码引用或数据引用,那么在进行合并时,可能遇到符号冲突的问题。这些问题需要根据芯片的体系结构进行仔细处理。 最后,可以使用芯片厂商提供的在线更新工具或USB接口来更新新合并的程序。同时,建议保留原始Bootloader程序副本,并留下有足够的空间用于Bootloader升级和App程序更新。 在合并Bootloader和应用程序时,需要谨慎操作并正确理解程序内部的所有细节。对于初学者,建议多阅读有关Linker脚本、芯片体系结构和在线更新工具等方面的文档。只要掌握了一定的知识,合并两个程序是相对容易的。 ### 回答3: 合并STM32的bootloaderapp程序可以通过以下步骤完成: 第一步:准备工作。需要在开发板上安装bootloader程序和app程序,并确保它们可以正常工作。 第二步:将app程序复制到bootloader程序空间中。要将app程序复制到bootloader程序空间中,需要使用类似于bootloaders的工具,如Jtag和swd调试工具。此时,需要打开读写权限。通过这种方式,可以将app程序的bin文件复制到bootloader程序的空间中。 第三步:在bootloader程序中添加升级代码。为实现升级功能,需要在bootloader程序的代码中添加升级代码。升级代码会扫描设备中的特定区域,找到新的app程序,并将其加载到设备中。在加载新的app程序时,需要保证其正确性。 第四步:设置跳转指令。当app程序加载到设备中时,需要跳转到app程序的入口点。这可以通过添加跳转指令或在app程序入口处添加向bootloader程序的跳转指令来完成。 综上所述,合并STM32的bootloaderapp程序需要在开发板上安装bootloader程序和app程序,并确保其可以正常工作。然后,将app程序复制到bootloader程序空间中,并添加升级代码。最后,设置跳转指令以确保设备可以跳转到app程序的入口点。完成以上步骤后,实现了STM32的bootloaderapp程序的合并

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值