机架参考
为了将基于 Nuttx 的 PX4 移植到新的硬件平台上,Nuttx 必须支持该硬件平台。 NuttX 项目维护着一份优秀的移植指南,用于将 NuttX 移植到新的计算平台。
以下指南假定您正在使用已受支持的硬件目标,或者已经移植了 NuttX(包括 PX4 基础层)。
所有板卡的配置文件,包括链接脚本和其他必需的设置,都位于 /boards 目录下特定厂商和板卡的目录中(即 boards/VENDOR/MODEL/)。
以下示例使用 FMUv5,因为它是基于 NuttX 的飞行控制器的最新参考配置:
- 从 PX4-Autopilot 目录运行
make px4_fmu-v5_default
将构建 FMUv5 的配置。 - FMUv5 的基础配置文件位于:/boards/px4/fmu-v5。
- 特定板卡的头文件(NuttX 引脚和时钟配置):/boards/px4/fmu-v5/nuttx-config/include/board.h。
- 特定板卡的头文件(PX4 配置):/boards/px4/fmu-v5/src/board_config.h。
- NuttX 操作系统配置(使用 NuttX menuconfig 创建):/boards/px4/fmu-v5/nuttx-config/nsh/defconfig。
- 构建配置:boards/px4/fmu-v5/default.px4board。
NuttX Menuconfig 设置
要修改 NuttX 操作系统的配置,您可以使用 menuconfig,通过 PX4 的快捷方式:
make px4_fmu-v5_default menuconfig
make px4_fmu-v5_default qconfig
对于使用 ubuntu.sh 在 Ubuntu 上全新安装 PX4 的情况,您还需要从 NuttX 工具 安装 kconfig 工具。
INFO
如果使用 px4-dev-nuttx Docker 容器,或者按照我们的常规说明安装到 macOS 上(因为这些安装方式包含 kconfig-mconf
),则不需要执行以下步骤。
从任意目录运行以下命令:
git clone https://bitbucket.org/nuttx/tools.git
cd tools/kconfig-frontends
sudo apt install gperf
./configure --enable-mconf --disable-nconf --disable-gconf --enable-qconf --prefix=/usr
make
sudo make install
--prefix=/usr
确定了具体的安装位置(该位置必须在 PATH
环境变量中)。 --enable-mconf
和 --enable-qconf
选项将分别启用 menuconfig
和 qconfig
选项。
要运行 qconfig
,您可能需要安装额外的 Qt 依赖项。
引导加载程序
首先,您需要一个引导加载程序,这取决于硬件目标:
- STM32H7:引导加载程序基于 NuttX,并包含在 PX4 固件中。 示例请参见 此处。
- 对于所有其他目标,使用 https://github.com/PX4/Bootloader。有关如何添加新目标的示例,请参见 此处。 然后查看 构建和刷写说明。
固件移植步骤
确保您有一个可用的开发设置,并安装了 NuttX
menuconfig
工具(见上文)。下载源代码,并确保您可以构建一个现有的目标:
shgit clone --recursive https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot make px4_fmu-v5
找到一个使用相同(或密切相关)CPU 类型的现有目标并复制它。 例如,对于 STM32F7:
shmkdir boards/manufacturer cp -r boards/px4/fmu-v5 boards/manufacturer/my-target-v1
将 manufacturer 替换为制造商名称,将 my-target-v1 替换为您的板卡名称。
接下来,您需要遍历 boards/manufacturer/my-target-v1 下的所有文件,并根据您的板卡进行更新。
- firmware.prototype:更新板卡 ID 和名称。
- default.px4board:更新 VENDOR 和 MODEL,使其与目录名称(my-target-v1)匹配。 配置串行端口。
- 通过
make manufacturer_my-target-v1 menuconfig
配置 NuttX(defconfig):调整 CPU 和芯片,配置外围设备(UART、SPI、I2C、ADC)。 - nuttx-config/include/board.h:配置 NuttX 引脚。 对于所有具有多个引脚选项的外围设备,NuttX 需要知道具体的引脚。 它们在特定芯片的引脚映射头文件中定义,例如 stm32f74xx75xx_pinmap.h。
- src:遍历 src 下的所有文件,并根据需要进行更新,特别是 board_config.h。
- init/rc.board_sensors:启动连接到板卡的传感器。