引导加载程序更新
“PX4引导加载程序”用于在Pixhawk板卡(PX4FMU、PX4IO)上加载固件。
Pixhawk控制器通常预先安装了合适的引导程序。但在某些情况下,可能不存在引导程序,或者需要更新旧版本的引导程序。
本文介绍了更新Pixhawk引导加载程序的几种常见方法。
INFO
- 大多数板卡需要使用调试探针来更新引导加载程序。
- 在[FMUv6X - RT](../flight_controller/pixhawk6x - rt.md)上,你可以通过USB安装引导加载程序/修复板卡。如果没有调试探针,这种方法很有用。
- 仅在FMUv2和某些自定义固件上,你可以使用QGC引导加载程序更新。
构建PX4引导加载程序
PX4引导加载程序(FMUv6X及更高版本)
从FMUv6X(STM32H7)板卡开始,使用代码树内的PX4引导加载程序。
可以在[PX4 - Autopilot](https://github.com/PX4/PX4 - Autopilot)目录内部,使用make
命令以及特定于板卡的目标后缀_bootloader
来构建。
对于FMUv6X,命令如下:
make px4_fmu - v6x_bootloader
这将构建引导加载程序二进制文件,路径为build/px4_fmu - v6x_bootloader/px4_fmu - v6x_bootloader.elf
,可以通过SWD或DFU进行烧录。如果你准备构建引导加载程序,应该已经熟悉其中一种烧录方式。
如果需要HEX文件而非ELF文件,可以使用objcopy参数:
arm - none - eabi - objcopy -O ihex build/px4_fmu - v6x_bootloader/px4_fmu - v6x_bootloader.elf px4_fmu - v6x_bootloader.hex
PX4引导加载程序(FMUv5X及更早版本)
FMUv5X(STM32H7之前)及更早的PX4板卡使用PX4引导加载程序仓库。
该仓库README中的说明解释了如何使用它。
使用手动方式更新引导加载程序
以下步骤说明如何使用兼容的调试探针 “手动” 更新引导加载程序:
- 获取包含引导加载程序的二进制文件(可以从开发团队获取,或者自行构建)。
- 获取一个调试探针。通过USB将探针连接到你的电脑,并设置
gdbserver
。 - 进入包含二进制文件的目录,在终端中运行针对目标引导加载程序的命令:
- FMUv6X
arm - none - eabi - gdb px4_fmu - v6x_bootloader.elf
- FMUv6X - RT
arm - none - eabi - gdb px4_fmu - v6xrt_bootloader.elf
- FMUv5
(此处FMUv5的命令缺失,原文如此)
INFO
来自[PX4/PX4 - Autopilot](https://github.com/PX4/PX4 - Autopilot)的H7引导加载程序命名模式为*._bootloader.elf
。 来自[PX4/PX4 - Bootloader](https://github.com/PX4/PX4 - Bootloader)的引导加载程序命名模式为*_bl.elf
。
- “gdb终端” 会出现,并显示以下输出:
GNU gdb (GNU Tools for Arm Embedded Processors 7 - 2017 - q4 - major) 8.0.50.20171128 - git
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64 - linux - gnu --target=arm - none - eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from px4fmuv5_bl.elf...done.
- 通过在**/dev/serial/by - id**目录中运行
ls
命令,找到你的<dronecode - probe - id>
。 - 现在使用以下命令连接到调试探针:
tar ext /dev/serial/by - id/<dronecode - probe - id>
- 用另一根USB线为Pixhawk上电,并将探针连接到
FMU - DEBUG
端口。
INFO
如果使用的是Dronecode探针,可能需要移除外壳才能连接到FMU - DEBUG
端口(例如,在Pixhawk 4上,你需要使用T6梅花螺丝刀来操作)。
- 使用以下命令扫描Pixhawk的SWD并连接:
(gdb) mon swdp_scan
(gdb) attach 1
- 将二进制文件加载到Pixhawk中:
(gdb) load
引导加载程序更新完成后,你可以使用_QGroundControl_ 加载PX4固件。
使用QGC更新引导加载程序
最简单的方法是首先使用_QGroundControl_安装包含所需/最新引导加载程序的固件。然后,通过设置参数SYS_BL_UPDATE,在下次重启时启动引导加载程序更新。
只有当固件中存在SYS_BL_UPDATE时,才能使用这种方法。
WARNING
目前只有FMUv2和一些自定义固件包含所需的引导加载程序。
步骤如下:
- 插入SD卡(启用引导日志记录,以便调试可能出现的问题)。
- 更新固件,使用包含新的/所需引导加载程序的镜像。
INFO
更新后的引导加载程序可能包含在自定义固件中(例如来自开发团队),或者可能包含在最新的主分支中。
- 等待飞控重启。
- 查找并启用参数SYS_BL_UPDATE。
- 重新启动(断开/重新连接飞控板)。引导加载程序更新只需几秒钟即可完成。
通常在这一步之后,你可能需要使用正确的/新安装的引导加载程序再次更新固件。
以下是更新FMUv2引导程序的一个具体例子。
FMUv2引导加载程序更新
如果_QGroundControl_安装的是FMUv2目标(安装过程中可查看控制台),而你使用的是更新的板卡,为了能够访问飞行控制器的全部内存,你可能需要更新引导加载程序。
INFO
早期的FMUv2 Pixhawk系列飞行控制器存在一个硬件问题,限制它们只能使用1MB的闪存。这个问题在新版板卡中已解决,但你可能需要更新工厂提供的引导程序,以便安装FMUv3固件并访问全部2MB可用内存。
要更新引导程序:
- 插入SD卡(启用引导日志记录,以便调试可能出现的问题)。
- 更新固件到PX4的“主分支(master)”版本(更新固件时,勾选“高级设置”,然后从下拉列表中选择“开发者版本(主分支)”)。_QGroundControl_将自动检测到硬件支持FMUv2,并安装相应的固件。
等待飞控重启。
- 查找并启用参数SYS_BL_UPDATE。
- 重新启动(断开/重新连接飞控板)。引导加载程序更新只需几秒钟即可完成。
- 然后再次更新固件。这次_QGroundControl_应该会自动将硬件检测为FMUv3,并相应地更新固件。
INFO
如果硬件存在硅片勘误问题,它仍将被检测为FMUv2,并且你会在控制台中看到FMUv2被重新安装。在这种情况下,你将无法安装FMUv3硬件。
其他飞控板(非Pixhawk)
不属于Pixhawk系列的板卡,会有它们自己的引导加载程序更新机制。
对于预刷了Betaflight的板卡,可参考将引导加载程序烧录到Betaflight系统。