From 84c6b5ac6b0992f3cb4800213321ab26fdd819fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Fri, 14 Sep 2018 09:53:23 +0200 Subject: [PATCH] fmu-v2: add bootloader binary and SYS_BL_UPDATE param for BL updates This allows a simple-to-use bootloader update mechanism to switch from fmu-v2 to fmu-v3 target that has more flash. --- ROMFS/CMakeLists.txt | 9 ++++++++ ROMFS/px4fmu_common/extras/README.txt | 5 +++++ ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin | Bin 0 -> 10448 bytes ROMFS/px4fmu_common/init.d/rcS | 21 +++++++++++++++++++ cmake/configs/nuttx_px4fmu-v2_default.cmake | 4 +++- src/modules/systemlib/system_params.c | 22 ++++++++++++++++++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 ROMFS/px4fmu_common/extras/README.txt create mode 100755 ROMFS/px4fmu_common/extras/px4fmuv3_bl.bin 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 0000000000000000000000000000000000000000..196af2c249a1978108f1fac32a7b2e9efdbd38b7 GIT binary patch literal 10448 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 literal 0 HcmV?d00001 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);