Skip to content

Commit

Permalink
cmake: build mcuboot using multi image build
Browse files Browse the repository at this point in the history
Leverage multi image functionality to allow mcuboot
being built from zephyr app build dir.

Signed-off-by: Sebastian Bøe <[email protected]>
Signed-off-by: Håkon Øye Amundsen <[email protected]>
  • Loading branch information
SebastianBoe authored and hakonfam committed Feb 22, 2019
1 parent ea4d33a commit 33bde05
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 0 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,7 @@ list(APPEND
${extra_post_build_commands}
)


add_custom_command(
TARGET ${logical_target_for_zephyr_elf}
POST_BUILD
Expand Down
1 change: 1 addition & 0 deletions subsys/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ add_subdirectory_ifdef(CONFIG_NET_BUF net)
add_subdirectory_ifdef(CONFIG_USB usb)
add_subdirectory(random)
add_subdirectory(storage)
add_subdirectory(boot)
add_subdirectory_ifdef(CONFIG_SETTINGS settings)
add_subdirectory(fb)
add_subdirectory(power)
Expand Down
2 changes: 2 additions & 0 deletions subsys/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ source "subsys/mgmt/Kconfig"

source "subsys/net/Kconfig"

source "subsys/boot/Kconfig"

source "subsys/shell/Kconfig"

source "subsys/usb/Kconfig"
Expand Down
1 change: 1 addition & 0 deletions subsys/boot/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_subdirectory_ifdef(CONFIG_BOOTLOADER_MCUBOOT mcuboot)
1 change: 1 addition & 0 deletions subsys/boot/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rsource "mcuboot/Kconfig"
36 changes: 36 additions & 0 deletions subsys/boot/mcuboot/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Build a second bootloader image

# TODO: Make configurable like OT until west is supported.
set(MCUBOOT_BASE "${ZEPHYR_BASE}/../mcuboot")
assert_exists(MCUBOOT_BASE)

zephyr_add_executable(mcuboot)
add_subdirectory("${MCUBOOT_BASE}/boot/zephyr" ${CMAKE_CURRENT_BINARY_DIR}/mcuboot)

# TODO: Assert that the bootloader and image use the same key.

set(SIGNED_IMAGE signed.hex)

set_property(GLOBAL APPEND PROPERTY
extra_post_build_commands
COMMAND
${PYTHON_EXECUTABLE}
${MCUBOOT_BASE}/scripts/imgtool.py
sign
--key ${MCUBOOT_BASE}/${CONFIG_BOOT_SIGNATURE_KEY_FILE}
--header-size ${CONFIG_TEXT_SECTION_OFFSET}
--align 8 # TODO: Configurable?
--version 1.0 # TODO: Configurable?
--slot-size 0x32000 # TODO: Configurable?
${KERNEL_HEX_NAME} # TODO: Enforce that this will be present through Kconfig
${SIGNED_IMAGE}
)

set_property(GLOBAL APPEND PROPERTY
HEX_FILES_TO_MERGE
${SIGNED_IMAGE}
)
set_property(GLOBAL APPEND PROPERTY
HEX_FILES_TO_MERGE_TARGET
${logical_target_for_zephyr_elf}
)
19 changes: 19 additions & 0 deletions subsys/boot/mcuboot/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
if BOOTLOADER_MCUBOOT

config MCUBOOT_CMAKELISTS_DIR
string "Path to the directory of the MCUBoot CMakeLists.txt file"
default "$MCUBOOT_BASE/boot/zephyr/"

endif # BOOTLOADER_MCUBOOT

if MCUBOOT || BOOTLOADER_MCUBOOT
# TODO: Support sharing Kconfig configuration between images
config BOOT_SIGNATURE_KEY_FILE
string "PEM key file"
default "root-rsa-2048.pem"
help
The key file will be parsed by imgtool's getpub command and a .c source
with the public key information will be written in a format expected by
MCUboot.

endif # MCUBOOT || BOOTLOADER_MCUBOOT

0 comments on commit 33bde05

Please sign in to comment.