乐于分享
好东西不私藏

如何将PX4源码编译的bootloader和Firmware固件合并一个.hex?(类似Ardupilot的xxx_with_bl.hex)

如何将PX4源码编译的bootloader和Firmware固件合并一个.hex?(类似Ardupilot的xxx_with_bl.hex)

前言
做PX4无人机固件开发的朋友都清楚,对着PX4源码一顿魔改以后,最终分别执行编译bootloader和编译固件的命令,编译成功后,会在PX4源码的build目录下看到2个文件夹,再分别刷写文件夹里面的bootloader和主程序固件!
由于本人手上这些飞控板,经常在AP/BF/PX4三种固件之间,反复烧录调试。
然后问题就来了,每次我从别的飞控固件刷回PX4固件的时候,总是让我非常不爽。因为PX4每次要让我刷两次固件,要先刷入bootloader,再刷PX4的主程序固件。像BF/INAV/AP都只需要刷一次固件,这种要多动一步的操作,我实在是:

于是打开了CodeX,直接把需求扔了进去。让它帮我将bootloader和firmware主程序做合成,最终输出一个.hex格式的固件。没想到速度倒挺快的,马上给了一堆命令!然后我打开终端,一顿劈里啪啦复制、粘贴、回车。

最终都没报错,固件也生成了,但是烧录以后发现程序没启动,QGC地面站也没连上。我猜测应该是PX4主程序的地址不对,于是又在STM32cubeprogrammer分别打开了bootloader和firmware的.elf格式的固件,把这两张图中的地址和大小标记后,扔给了AI。
AI又改了一次,就成功了~~

具体方法,记录一下
1、安装srecord工具,输入命令:
sudo apt-get install srecord
2、回到PX4源码的根目录下,输入命令:
cd ~cd PX4-Autopilot/
3、执行关键命令(AI告诉我的…)
srec_cat \build/wuwei_wfg100_bootloader/wuwei_wfg100_bootloader.bin -Binary -Offset 0x08000000 \build/wuwei_wfg100_default/wuwei_wfg100_default.bin -Binary -Offset 0x08020000 \-o build/WFG100_PX4_Firmware_with_bl.hex -Intel
注:我的固件存放目录是默认路径(/PX4-Autopilot/build),但板子名称以及固件名称,大家需要按照实际情况自行修改~
4、最后就生成了一个.hex的固件
5、把这个.hex的PX4固件烧进飞控板里面~
6、然后重启,再连接QGC,一切正常~~

AI执行确实很强,但如果要用好AI工具。如果使用者懂这方面领域的一些通用知识,能够更好、更高效的把控AI的执行方向!