@@ -8,32 +8,93 @@ if(CONFIG_BOOTLOADER_MCUBOOT)
88 if (${require_build} )
99 add_subdirectory (${MCUBOOT_BASE} /boot/zephyr ${CMAKE_BINARY_DIR} /mcuboot)
1010
11+ set (to_sign ${KERNEL_HEX_NAME} )
12+
1113 # TODO: Assert that the bootloader and image use the same key.
1214
13- set (SIGNED_IMAGE signed.hex)
15+ set (signed_image_hex ${PROJECT_BINARY_DIR} /signed.hex)
16+ set (signed_image_bin ${PROJECT_BINARY_DIR} /signed.bin)
17+ set (to_sign_bin ${PROJECT_BINARY_DIR} /to_sign.bin)
18+ set (update_hex ${PROJECT_BINARY_DIR} /update.hex)
19+ set (update_bin ${PROJECT_BINARY_DIR} /update.bin)
1420
15- set_property (GLOBAL APPEND PROPERTY
16- extra_post_build_commands
21+ set (merged_hex_file
22+ $<TARGET_PROPERTY:partition_manager,MCUBOOT_TO_SIGN>)
23+ set (merged_hex_file_depends
24+ $<TARGET_PROPERTY:partition_manager,MCUBOOT_TO_SIGN_DEPENDS>)
25+ set (sign_merged
26+ $<BOOL :$<TARGET_PROPERTY:partition_manager,MCUBOOT_TO_SIGN>>)
27+ set (to_sign
28+ $<IF:${sign_merged} ,${merged_hex_file} ,${PROJECT_BINARY_DIR} /${KERNEL_HEX_NAME} >)
29+ set (sign_depends
30+ $<IF:${sign_merged} ,${merged_hex_file_depends} ,kernel_elf>)
31+ add_custom_command (
32+ OUTPUT
33+ ${signed_image_hex}
34+ ${update_hex}
35+ ${update_bin}
1736 COMMAND
1837 ${PYTHON_EXECUTABLE}
1938 ${MCUBOOT_BASE} /scripts/imgtool.py
2039 sign
2140 --key ${MCUBOOT_BASE} /${CONFIG_BOOT_SIGNATURE_KEY_FILE}
22- --header-size ${CONFIG_TEXT_SECTION_OFFSET}
41+ --header-size $<TARGET_PROPERTY:partition_manager,MCUBOOT_HEADER_SIZE>
2342 --align ${DT_FLASH_WRITE_BLOCK_SIZE}
2443 --version 0.1 # TODO: Configurable?
25- --slot-size 0x32000 # TODO: Configurable?
26- ${KERNEL_HEX_NAME} # TODO: Enforce that this will be present through Kconfig
27- ${SIGNED_IMAGE}
44+ --slot-size $<TARGET_PROPERTY:partition_manager,MCUBOOT_SLOT_SIZE>
45+ --pad-header
46+ ${to_sign}
47+ ${signed_image_hex}
48+ COMMAND
49+ ${CMAKE_OBJCOPY}
50+ --input -target =ihex
51+ --output -target =binary
52+ ${to_sign}
53+ ${to_sign_bin}
54+ COMMAND
55+ ${PYTHON_EXECUTABLE}
56+ ${MCUBOOT_BASE} /scripts/imgtool.py
57+ sign
58+ --key ${MCUBOOT_BASE} /${CONFIG_BOOT_SIGNATURE_KEY_FILE}
59+ --header-size $<TARGET_PROPERTY:partition_manager,MCUBOOT_HEADER_SIZE>
60+ --align ${DT_FLASH_WRITE_BLOCK_SIZE}
61+ --version 0.1 # TODO: Configurable?
62+ --slot-size $<TARGET_PROPERTY:partition_manager,MCUBOOT_SLOT_SIZE>
63+ --pad-header
64+ ${to_sign_bin}
65+ ${update_bin}
66+ COMMAND
67+ ${CMAKE_OBJCOPY}
68+ --input -target =binary
69+ --output -target =ihex
70+ ${update_bin}
71+ ${update_hex}
72+ COMMAND
73+ ${CMAKE_OBJCOPY}
74+ --input -target =binary
75+ --output -target =ihex
76+ ${update_bin}
77+ ${update_hex}
78+ COMMAND
79+ ${CMAKE_OBJCOPY}
80+ --input -target =ihex
81+ --output -target =ihex
82+ --change-address $<TARGET_PROPERTY:partition_manager,MCUBOOT_SECONDARY_ADDRESS>
83+ ${update_hex}
84+ ${PROJECT_BINARY_DIR} /moved_update.hex
85+ DEPENDS
86+ ${sign_depends}
2887 )
88+ add_custom_target (mcuboot_sign_target DEPENDS ${signed_image_hex} )
2989
3090 set_property (GLOBAL APPEND PROPERTY
3191 HEX_FILES_TO_MERGE
32- ${SIGNED_IMAGE }
92+ ${signed_image_hex }
3393 )
3494 set_property (GLOBAL APPEND PROPERTY
3595 HEX_FILES_TO_MERGE_TARGET
3696 ${logical_target_for_zephyr_elf}
97+ mcuboot_sign_target
3798 )
3899 endif () # ${require_build}
39100endif ()
0 commit comments