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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 W%Y^Ql##3uZdLeX>eBkn(DgO)o((>m3 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);