Skip to content

Commit 9f5bf96

Browse files
committed
sysbuild: Add firmware loader application type support
Adds support for setting up a firmware loader image in a build, which can also optionally automatically configure MCUboot and the application image to be able to boot the firmware loader image using the retention subsystem Signed-off-by: Jamie McCrae <[email protected]>
1 parent 6799f5d commit 9f5bf96

File tree

9 files changed

+99
-5
lines changed

9 files changed

+99
-5
lines changed

share/sysbuild/cmake/modules/sysbuild_extensions.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ endfunction()
216216
# and debugging.
217217
#
218218
function(ExternalZephyrProject_Add)
219-
set(app_types MAIN BOOTLOADER)
219+
set(app_types MAIN BOOTLOADER FIRMWARE_LOADER)
220220
cmake_parse_arguments(ZBUILD "" "APPLICATION;BOARD;BOARD_REVISION;SOURCE_DIR;APP_TYPE;BUILD_ONLY" "" ${ARGN})
221221

222222
if(ZBUILD_UNPARSED_ARGUMENTS)

share/sysbuild/image_configurations/BOOTLOADER_image_default.cmake

+9-2
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,17 @@ elseif(SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP OR SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WI
2929
set(bootmode CONFIG_BOOT_DIRECT_XIP)
3030
elseif(SB_CONFIG_MCUBOOT_MODE_RAM_LOAD)
3131
set(bootmode CONFIG_BOOT_RAM_LOAD)
32-
elseif(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
33-
set(bootmode CONFIG_BOOT_FIRMWARE_LOADER)
3432
elseif(SB_CONFIG_MCUBOOT_MODE_SINGLE_APP_RAM_LOAD)
3533
set(bootmode CONFIG_SINGLE_APPLICATION_SLOT_RAM_LOAD)
34+
elseif(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
35+
set(bootmode CONFIG_BOOT_FIRMWARE_LOADER)
36+
37+
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER_BOOT_MODE_ENTRANCE)
38+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETAINED_MEM y)
39+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETENTION y)
40+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETENTION_BOOT_MODE y)
41+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_BOOT_FIRMWARE_LOADER_BOOT_MODE y)
42+
endif()
3643
endif()
3744

3845
foreach(loopbootmode ${bootmodes})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Copyright (c) 2025 Nordic Semiconductor
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
# This sysbuild CMake file sets the sysbuild controlled settings as properties
6+
# on a firmware updater image.
7+
8+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_BOOTLOADER_MCUBOOT "${SB_CONFIG_BOOTLOADER_MCUBOOT}")
9+
set_config_string(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_SIGNATURE_KEY_FILE
10+
"${SB_CONFIG_BOOT_SIGNATURE_KEY_FILE}"
11+
)
12+
set_config_string(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_ENCRYPTION_KEY_FILE
13+
"${SB_CONFIG_BOOT_ENCRYPTION_KEY_FILE}"
14+
)
15+
16+
if("${SB_CONFIG_SIGNATURE_TYPE}" STREQUAL "NONE")
17+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_GENERATE_UNSIGNED_IMAGE y)
18+
else()
19+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_GENERATE_UNSIGNED_IMAGE n)
20+
endif()
21+
22+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_FIRMWARE_UPDATER y)

share/sysbuild/image_configurations/MAIN_image_default.cmake

+9-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,16 @@ if(SB_CONFIG_BOOTLOADER_MCUBOOT)
3939
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_RAM_LOAD y)
4040
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_XIP n)
4141
set_config_int(${ZCMAKE_APPLICATION} CONFIG_FLASH_SIZE 0)
42-
elseif(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
43-
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_FIRMWARE_UPDATER y)
4442
elseif(SB_CONFIG_MCUBOOT_MODE_SINGLE_APP_RAM_LOAD)
4543
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_SINGLE_APP_RAM_LOAD y)
44+
elseif(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
45+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_FIRMWARE_UPDATER y)
46+
47+
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER_BOOT_MODE_ENTRANCE)
48+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_REBOOT y)
49+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETAINED_MEM y)
50+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETENTION y)
51+
set_config_bool(${ZCMAKE_APPLICATION} CONFIG_RETENTION_BOOT_MODE y)
52+
endif()
4653
endif()
4754
endif()

share/sysbuild/images/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ExternalZephyrProject_Add(
1212

1313
# This allows for MCUboot to be included.
1414
sysbuild_add_subdirectory(bootloader)
15+
sysbuild_add_subdirectory(firmware_loader)
1516

1617
# Include zephyr modules generated sysbuild CMake file.
1718
foreach(SYSBUILD_CURRENT_MODULE_NAME ${SYSBUILD_MODULE_NAMES})

share/sysbuild/images/Kconfig

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55
rsource "bootloader/Kconfig"
6+
rsource "firmware_loader/Kconfig"

share/sysbuild/images/bootloader/Kconfig

+8
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ config MCUBOOT_MODE_SINGLE_APP_RAM_LOAD
141141

142142
endchoice
143143

144+
config MCUBOOT_MODE_FIRMWARE_UPDATER_BOOT_MODE_ENTRANCE
145+
bool "Firmware updater retention boot mode entrance"
146+
depends on MCUBOOT_MODE_FIRMWARE_UPDATER
147+
help
148+
Will enable retained memory, retention and the boot mode module in MCUboot and the main
149+
application so that it can be used to force booting the firmware loader application
150+
image. This needs the ``zephyr,boot-mode`` chosen node to be correctly configured.
151+
144152
config SIGNATURE_TYPE
145153
string
146154
default "NONE" if BOOT_SIGNATURE_TYPE_NONE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Copyright (c) 2025 Nordic Semiconductor
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
if(SB_CONFIG_FIRMWARE_LOADER_IMAGE_PATH)
6+
ExternalZephyrProject_Add(
7+
APPLICATION ${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME}
8+
SOURCE_DIR ${SB_CONFIG_FIRMWARE_LOADER_IMAGE_PATH}
9+
APP_TYPE FIRMWARE_LOADER
10+
)
11+
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) 2025 Nordic Semiconductor
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
config SUPPORT_FIRMWARE_LOADER_SMP_SVR
6+
bool
7+
default y
8+
9+
choice FIRMWARE_LOADER
10+
prompt "Firmware loader image"
11+
default FIRMWARE_LOADER_IMAGE_NONE
12+
depends on MCUBOOT_MODE_FIRMWARE_UPDATER
13+
14+
config FIRMWARE_LOADER_IMAGE_NONE
15+
bool "None"
16+
help
17+
Do not Include a firmware loader image in the build.
18+
19+
config FIRMWARE_LOADER_IMAGE_SMP_SVR
20+
bool "smp_svr"
21+
depends on SUPPORT_FIRMWARE_LOADER_SMP_SVR
22+
help
23+
Include the MCUmgr ``smp_svr`` sample as the firmware loader image to use.
24+
25+
endchoice
26+
27+
config FIRMWARE_LOADER_IMAGE_NAME
28+
string
29+
default "smp_svr" if FIRMWARE_LOADER_IMAGE_SMP_SVR
30+
help
31+
Name of firmware loader image.
32+
33+
config FIRMWARE_LOADER_IMAGE_PATH
34+
string
35+
default "${ZEPHYR_BASE}/samples/subsys/mgmt/mcumgr/smp_svr" if FIRMWARE_LOADER_IMAGE_SMP_SVR
36+
help
37+
Source directory of firmware loader image.

0 commit comments

Comments
 (0)