mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
211 lines
9.0 KiB
Markdown
211 lines
9.0 KiB
Markdown
# Bootloader 更新
|
||
|
||
The _PX4 Bootloader_ is used to load firmware for [Pixhawk boards](../flight_controller/pixhawk_series.md) (PX4FMU, PX4IO).
|
||
|
||
Pixhawk控制器通常预安装了适当的引导程序。
|
||
但在某些情况下,当它不存在,或者有一个的旧版本需要更新。
|
||
|
||
此篇介绍了更新 Pixhawk bootloader 的几种常见方法。
|
||
|
||
::: info
|
||
|
||
- You can use [QGC Bootloader Update](#qgc-bootloader-update-sys-bl-update) with firmware that includes the [`bl-update` module](../modules/modules_command.md#bl-update).
|
||
This is the easiest way to update the bootloader, provided the board is able to load firmware.
|
||
- You can also use the [Debug Probe](#debug-probe-bootloader-update) to update the bootloader.
|
||
This is useful for updating/fixing the bootloader when the board is bricked.
|
||
- On [FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) you can [install bootloader/unbrick boards via USB](bootloader_update_v6xrt.md).
|
||
This is useful if you don't have a debug probe.
|
||
|
||
:::
|
||
|
||
## QGC Bootloader Update (`SYS_BL_UPDATE`)
|
||
|
||
The easiest way to update the bootloader is to first use _QGroundControl_ to install firmware that contains the desired/latest bootloader.
|
||
You can then initiate bootloader update on next restart by setting the parameter: [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE).
|
||
|
||
This approach can be used if the [`bl-update` module](../modules/modules_command.md#bl-update) is present in the firmware.
|
||
The easiest way to check this is just to see if the [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE) parameter is [found in QGroundControl](../advanced_config/parameters.md#finding-a-parameter).
|
||
|
||
:::warning
|
||
Boards that include the module will have the line `CONFIG_SYSTEMCMDS_BL_UPDATE=y` in their `default.px4board` file (for examples [see this search](https://github.com/search?q=repo%3APX4%2FPX4-Autopilot+path%3A**%2Fdefault.px4board+CONFIG_SYSTEMCMDS_BL_UPDATE%3Dy&type=code)).
|
||
You can enable this key in your own custom firmware if needed.
|
||
:::
|
||
|
||
步骤如下:
|
||
|
||
1. 插入 SD 卡(使能引导日志记录,便于调试任何可能的问题)。
|
||
|
||
2. [Update the Firmware](../config/firmware.md#custom) with an image containing the new/desired bootloader.
|
||
|
||
::: info
|
||
The updated bootloader might be included the default firmware for your board or supplied in custom firmware.
|
||
|
||
:::
|
||
|
||
3. 等待飞控重启。
|
||
|
||
4. [Find and enable](../advanced_config/parameters.md) the parameter [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE).
|
||
|
||
5. 重新启动(断开/重新连接飞控板)。
|
||
Bootloader 更新只需要几秒钟即可完成。
|
||
|
||
Generally at this point you may then want to [update the firmware](../config/firmware.md) again using the correct/newly installed bootloader.
|
||
|
||
An specific example of this process for updating the [FMUv2 bootloader](#fmuv2-bootloader-update) is given below.
|
||
|
||
## 构建PX4 启动加载器
|
||
|
||
### PX4 Bootloader FMUv6X and later
|
||
|
||
从FMUv6X (STM32H7)的板子开始,使用代码树内的 PX4 bootloader。
|
||
|
||
This can be built from within the [PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) directory using the `make` command and the board-specific target with a `_bootloader` suffix.
|
||
|
||
对于FMUv6X,命令是:
|
||
|
||
```sh
|
||
make px4_fmu-v6x_bootloader
|
||
```
|
||
|
||
This will build the bootloader binary as `build/px4_fmu-v6x_bootloader/px4_fmu-v6x_bootloader.elf`, which can be flashed via SWD or DFU.
|
||
如果你正准备构建 bootloader,你应该已经熟悉这些选项之一。
|
||
|
||
如果需要 HEX 文件而不是 ELF 文件,请使用 objcopy 参数:
|
||
|
||
```sh
|
||
arm-none-eabi-objcopy -O ihex build/px4_fmu-v6x_bootloader/px4_fmu-v6x_bootloader.elf px4_fmu-v6x_bootloader.hex
|
||
```
|
||
|
||
### PX4 Bootloader FMUv5X and earlier
|
||
|
||
PX4 boards up to FMUv5X (before STM32H7) used the [PX4 bootloader](https://github.com/PX4/PX4-Bootloader) repository.
|
||
|
||
The instructions in the repo README explain how to use it.
|
||
|
||
## 构建旧的 PX4 启动加载器
|
||
|
||
The following steps explain how you can "manually" update the bootloader using a [compatible Debug Probe](../debug/swd_debug.md#debug-probes-for-px4-hardware):
|
||
|
||
1. Get a binary containing the bootloader (either from dev team or [build it yourself](#building-the-px4-bootloader)).
|
||
|
||
2. Get a [Debug Probe](../debug/swd_debug.md#debug-probes-for-px4-hardware).
|
||
Connect the probe your PC via USB and setup the `gdbserver`.
|
||
|
||
3. Go into the directory containing the binary and run the command for your target bootloader in the terminal:
|
||
|
||
- FMUv6X
|
||
|
||
```sh
|
||
arm-none-eabi-gdb px4_fmu-v6x_bootloader.elf
|
||
```
|
||
|
||
- FMUv6X-RT
|
||
|
||
```sh
|
||
arm-none-eabi-gdb px4_fmu-v6xrt_bootloader.elf
|
||
```
|
||
|
||
- FMUv5
|
||
|
||
```sh
|
||
```
|
||
|
||
::: info
|
||
H7 Bootloaders from [PX4/PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) are named with pattern `*._bootloader.elf`.
|
||
Bootloaders from [PX4/PX4-Bootloader](https://github.com/PX4/PX4-Bootloader) are named with the pattern `*_bl.elf`.
|
||
|
||
:::
|
||
|
||
4. The _gdb terminal_ appears and it should display (something like) the following output:
|
||
|
||
```sh
|
||
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:
|
||
<https://www.sourceware.org/gdb/bugs/>.
|
||
Find the GDB manual and other documentation resources online at:
|
||
<https://www.sourceware.org/gdb/documentation/>.
|
||
For help, type "help".
|
||
Type "apropos word" to search for commands related to "word"...
|
||
Reading symbols from px4fmuv5_bl.elf...done.
|
||
```
|
||
|
||
5. Find your `<dronecode-probe-id>` by running an `ls` command in the **/dev/serial/by-id** directory.
|
||
|
||
6. Now connect to the debug probe with the following command:
|
||
|
||
```sh
|
||
tar ext /dev/serial/by-id/<dronecode-probe-id>
|
||
```
|
||
|
||
7. Power on the Pixhawk with another USB cable and connect the probe to the `FMU-DEBUG` port.
|
||
|
||
::: info
|
||
If using a Zubax BugFace BF1 you may need to remove the case in order to connect to the `FMU-DEBUG` port (e.g. on Pixhawk 4 you would do this using a T6 Torx screwdriver).
|
||
|
||
:::
|
||
|
||
8. Use the following command to scan for the Pixhawk\`s SWD and connect to it:
|
||
|
||
```sh
|
||
(gdb) mon swdp_scan
|
||
(gdb) attach 1
|
||
```
|
||
|
||
9. 将二进制文件加载到 Pixhawk 中 :
|
||
|
||
```sh
|
||
(gdb) load
|
||
```
|
||
|
||
After the bootloader has updated you can [Load PX4 Firmware](../config/firmware.md) using _QGroundControl_.
|
||
|
||
## FMUv2 引导加载器更新
|
||
|
||
If _QGroundControl_ installs the FMUv2 target (see console during installation), and you have a newer board, you may need to update the bootloader in order to access all the memory on your flight controller.
|
||
This example explains how you can use [QGC Bootloader Update](qgc-bootloader-update-sys-bl-update) to update the bootloader.
|
||
|
||
:::info
|
||
Early FMUv2 [Pixhawk-series](../flight_controller/pixhawk_series.md#fmu_versions) flight controllers had a [hardware issue](../flight_controller/silicon_errata.md#fmuv2-pixhawk-silicon-errata) that restricted them to using 1MB of flash memory.
|
||
这个问题已在新版面解决, 但您可能需要更新工厂提供的引导程序,以便安装 FMUv3 固件并访问所有 2MB 可用内存。
|
||
:::
|
||
|
||
要更新引导器:
|
||
|
||
1. 插入 SD 卡(使能引导日志记录,便于调试任何可能的问题)。
|
||
|
||
2. [Update the Firmware](../config/firmware.md) to PX4 _master_ version (when updating the firmware, check **Advanced settings** and then select **Developer Build (master)** from the dropdown list).
|
||
_QGroundControl_ will automatically detect that the hardware supports FMUv2 and install the appropriate Firmware.
|
||
|
||

|
||
|
||
等待飞控重启。
|
||
|
||
3. [Find and enable](../advanced_config/parameters.md) the parameter [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE).
|
||
|
||
4. 重新启动(断开/重新连接飞控板)。
|
||
Bootloader 更新只需要几秒钟即可完成。
|
||
|
||
5. Then [Update the Firmware](../config/firmware.md) again.
|
||
This time _QGroundControl_ should autodetect the hardware as FMUv3 and update the Firmware appropriately.
|
||
|
||

|
||
|
||
::: info
|
||
If the hardware has the [Silicon Errata](../flight_controller/silicon_errata.md#fmuv2-pixhawk-silicon-errata) it will still be detected as FMUv2 and you will see that FMUv2 was re-installed (in console).
|
||
在这种情况下,您将无法安装 FMUv3 硬件。
|
||
|
||
:::
|
||
|
||
## 其他飞控板(非 Pixhawk)
|
||
|
||
Boards that are not part of the [Pixhawk Series](../flight_controller/pixhawk_series.md) will have their own mechanisms for bootloader update.
|
||
|
||
For boards that are preflashed with Betaflight, see [Bootloader Flashing onto Betaflight Systems](bootloader_update_from_betaflight.md).
|