boot和APP烧录文件合并
很多项目需要用到远程升级,那么就会有两个程序,和工程,那么在发布和烧写时就会很麻烦,如果能够将两个文件合并,一次烧写就可以了。
·
前言
很多项目需要用到远程升级,那么就会有两个程序,bootloader和APP工程,那么在发布和烧写时就会很麻烦,如果能够将两个文件合并,一次烧写就可以了。
一、Hex文件合并原理
boot.hex和app.hex的h文件合并,其实就是将boot.hex文件的最后一行删除,然后将app.hex文件复制到boot.hex文件的末尾就OK了。
可以直接使用记事本打开进行手动操作:
- 将boot文件的最后一行
:00000001FF删除 - 复制app文件粘贴到boot末尾

二、脚本操作
我们可以使用脚本来执行简单的自动化流程。因为电脑上安装了git,所以可以使用git bash来执行*.sh脚本文件。
下面参考鱼鹰大佬编写的脚本,修改为自己项目的文件,就可以测试使用了。
#!/bin/bash
#"D:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh" # MDK 中执行的命令
boot_file_hex=../BootLoader/Objects/zycm-c-boot.hex # BOOT 文件所在位置和名称
app_file_hex=../OBJ/zycm-c-app.hex #dir_file_name_hex=`find ${app_dir_file_hex} -name "*.hex"`
boot_app_file_hex=./zycm-c-app_252.hex
cp ${boot_file_hex} ${boot_app_file_hex} # 复制新文件 boot 文件
sed -i '$d' ${boot_app_file_hex} # 删除最后一行
cat ${app_file_hex} >> ${boot_app_file_hex} # 追加文件
将编写好的脚本放到工程目录下,然后配置keil在编译后运行这个脚本。
至此就完成了自动化生成合并后的烧写文件了。
三、boot是bin文件时与keil工程合并
本次碰到的情况是需要将bin文件与hex文件合并。
3.1 手动方式,使用j-flash
- 导入boot.bin文件,另存为boot.hex文件

- 将转换后的boot.hex导入j-flash,然后点击文件合成,选中app.hex文件。
- 将合并后的文件另存,即为合并后的烧写文件。

3.2 shell脚本
3.1.1中生成的boot.hex文件,不能直接和keil生成的app.hex按照前文的脚本直接合并
有两点需要修改:
- 复制后的
boot_app_file_hex无法追加文件:
keil编译记录查了半天找不到原因,后面用git_bash直接执行脚本,提示没有权限,询问AI发现文件缺少写权限,添加权限即可追加文件
chmod +w ${boot_app_file_hex}
- 合并后的文件无法导入j-flash烧写:
经过排查发现3.1.1中j-flash导出的boot.hex与keil编译生成的格式不兼容,最终使用srec_cat重新将boot.bin转换为intel格式的boot.hex,就可以使用脚本合并了。
srec_cat C:\Users\Administrator\Desktop\网关阀门井一体机__boot_110k.bin -binary -offset 0x0 -o C:\Users\Administrator\Desktop\网关阀门井一体机__boot_110k.hex -intel
更多推荐



所有评论(0)