diff --git a/ROMFS/CMakeLists.txt b/ROMFS/CMakeLists.txt index e552ffc889..d2c2a87c0c 100644 --- a/ROMFS/CMakeLists.txt +++ b/ROMFS/CMakeLists.txt @@ -103,6 +103,15 @@ if (config_io_board) ) endif() +if (config_bl_file) + file(MAKE_DIRECTORY ${PX4_BINARY_DIR}/romfs_extras) + configure_file(${config_bl_file} ${PX4_BINARY_DIR}/romfs_extras COPYONLY) + + list(APPEND extras_dependencies + ${config_bl_file} + ) +endif() + add_custom_command(OUTPUT romfs_extras.stamp COMMAND ${CMAKE_COMMAND} -E make_directory ${romfs_gen_root_dir}/extras/ COMMAND ${CMAKE_COMMAND} -E make_directory ${PX4_BINARY_DIR}/romfs_extras/ diff --git a/ROMFS/px4fmu_common/extras/README.txt b/ROMFS/px4fmu_common/extras/README.txt new file mode 100644 index 0000000000..4f7639784d --- /dev/null +++ b/ROMFS/px4fmu_common/extras/README.txt @@ -0,0 +1,5 @@ +px4fmuv3_bl.bin: Bootloader binary of the PX4 Bootloader + (https://github.com/PX4/Bootloader) + based on commit 184b813699a9cfd6f43a5a21556a06b4372baf5f + for the target px4fmuv3_bl + diff --git a/ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin b/ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin new file mode 100755 index 0000000000..196af2c249 Binary files /dev/null and b/ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin differ diff --git a/ROMFS/px4fmu_common/init.d/rcS b/ROMFS/px4fmu_common/init.d/rcS index a39192ff31..9f0586286d 100644 --- a/ROMFS/px4fmu_common/init.d/rcS +++ b/ROMFS/px4fmu_common/init.d/rcS @@ -211,6 +211,27 @@ else param reset fi + # + # Bootloader upgrade + # + if ver hwcmp PX4FMU_V2 + then + set BL_FILE /etc/extras/px4fmuv3_bl.bin + if [ -f $BL_FILE ] + then + if param compare SYS_BL_UPDATE 1 + then + param set SYS_BL_UPDATE 0 + param save + echo "BL update..." >> $LOG_FILE + bl_update $BL_FILE + echo "BL update done" >> $LOG_FILE + reboot + fi + fi + unset BL_FILE + fi + # # Start system state indicator. # diff --git a/cmake/configs/nuttx_px4fmu-v2_default.cmake b/cmake/configs/nuttx_px4fmu-v2_default.cmake index 320a9780ef..621d74cbed 100644 --- a/cmake/configs/nuttx_px4fmu-v2_default.cmake +++ b/cmake/configs/nuttx_px4fmu-v2_default.cmake @@ -2,6 +2,8 @@ px4_nuttx_configure(HWCLASS m4 CONFIG nsh ROMFS y ROMFSROOT px4fmu_common IO px4 #set(config_uavcan_num_ifaces 2) +set(config_bl_file ${PX4_SOURCE_DIR}/ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin) + set(config_module_list # # Board support modules @@ -62,7 +64,7 @@ set(config_module_list # # System commands # - #systemcmds/bl_update + systemcmds/bl_update #systemcmds/config #systemcmds/dumpfile #systemcmds/esc_calib diff --git a/src/modules/systemlib/system_params.c b/src/modules/systemlib/system_params.c index 69c118729b..b5e4e5cd40 100644 --- a/src/modules/systemlib/system_params.c +++ b/src/modules/systemlib/system_params.c @@ -267,3 +267,25 @@ PARAM_DEFINE_INT32(SYS_HAS_MAG, 1); * @group System */ PARAM_DEFINE_INT32(SYS_HAS_BARO, 1); + +/** + * Bootloader update + * + * If enabled, update the bootloader on the next boot. + * + * WARNING: do not cut the power during an update process, otherwise you will + * have to recover using some alternative method (e.g. JTAG). + * + * Instructions: + * - Insert an SD card + * - Enable this parameter + * - Reboot the board (plug the power or send a reboot command) + * - Wait until the board comes back up (or at least 2 minutes) + * - If it does not come back, check the file bootlog.txt on the SD card + * + * @boolean + * @reboot_required true + * + * @group System + */ +PARAM_DEFINE_INT32(SYS_BL_UPDATE, 0);