feat(tools): ship metadata, IO and BL files on SD card

This pushes the metadata files as well as the IO firmware and the
bootloader binary to the SD card.
That way, the files are don't have to be added to the firmware
binary or served via s3 for FLASH_CONSTRAINED targets.

The files are pushed after upload and verified in commander as part of
the preflight checks. If missing, a warning is displayed and arming is
prevented.

This means that an SD card can't be swapped out without reflashing (or
copying over the contents).
This commit is contained in:
Julian Oes
2026-04-09 06:05:30 +12:00
parent 5dba9990b4
commit 81e4e33811
18 changed files with 665 additions and 34 deletions
+60 -16
View File
@@ -33,24 +33,68 @@
# Uploader script auto-detects PX4 devices by USB VID/PID
set(PX4_UPLOADER_SCRIPT "${PX4_SOURCE_DIR}/Tools/px4_uploader.py")
set(PX4_SDCARD_UPLOAD_SCRIPT "${PX4_SOURCE_DIR}/Tools/px4_sdcard_upload.py")
add_custom_target(upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} ${fw_package}
DEPENDS ${fw_package}
COMMENT "uploading px4"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
if(CONFIG_BOARD_ROOT_PATH)
add_custom_target(force-upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} --force ${fw_package}
DEPENDS ${fw_package}
COMMENT "uploading px4 with --force"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
# Flash firmware, then push SD card files (metadata, bootloader, IO binary)
add_custom_target(upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} ${fw_package}
COMMAND ${PYTHON_EXECUTABLE} ${PX4_SDCARD_UPLOAD_SCRIPT}
--sdcard-dir ${PX4_BINARY_DIR}/sdcard
--device-root ${CONFIG_BOARD_ROOT_PATH}
DEPENDS ${fw_package} sdcard_files
COMMENT "uploading px4 and SD card files"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
add_custom_target(force-upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} --force ${fw_package}
COMMAND ${PYTHON_EXECUTABLE} ${PX4_SDCARD_UPLOAD_SCRIPT}
--sdcard-dir ${PX4_BINARY_DIR}/sdcard
--device-root ${CONFIG_BOARD_ROOT_PATH}
DEPENDS ${fw_package} sdcard_files
COMMENT "uploading px4 with --force and SD card files"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
# Standalone target: upload only SD card files (e.g. with --port)
add_custom_target(upload_sdcard
COMMAND ${PYTHON_EXECUTABLE} ${PX4_SDCARD_UPLOAD_SCRIPT}
--sdcard-dir ${PX4_BINARY_DIR}/sdcard
--device-root ${CONFIG_BOARD_ROOT_PATH}
DEPENDS sdcard_files
COMMENT "uploading SD card files via MAVLink FTP"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
else()
add_custom_target(upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} ${fw_package}
DEPENDS ${fw_package}
COMMENT "uploading px4"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
add_custom_target(force-upload
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} --force ${fw_package}
DEPENDS ${fw_package}
COMMENT "uploading px4 with --force"
VERBATIM
USES_TERMINAL
WORKING_DIRECTORY ${PX4_BINARY_DIR}
)
endif()
add_custom_target(upload-verbose
COMMAND ${PYTHON_EXECUTABLE} ${PX4_UPLOADER_SCRIPT} --verbose ${fw_package}
@@ -5,12 +5,12 @@
#
if param compare -s SYS_BL_UPDATE 1
then
if [ -f "/etc/extras/@BOARD_FIRMWARE_BIN@" ]
if [ -f "@BOARD_FIRMWARE_PATH@" ]
then
param set SYS_BL_UPDATE 0
param save
echo "bootloader update..."
bl_update "/etc/extras/@BOARD_FIRMWARE_BIN@"
bl_update "@BOARD_FIRMWARE_PATH@"
echo "bootloader update done, rebooting"
reboot
fi