I’m working on an nRF5340 project (NCS 2.9.2) with simultaneous multi-image DFU using MCUboot, MCUmgr (SMP over BLE), and external flash (MX25R64, like the DK).
App-core DFU works correctly. Net-core DFU (ipc_radio) uploads successfully, is reported as bootable and pending, but after reboot it disappears from the image list and Device Manager reports “Hash not found (8)”.
I tracked this down to the net-core image not being signed / versioned correctly:
-
DFU ZIP contains
peripheral_uart.signed.bin(app core) but only a rawipc_radio.bin(net core). -
After enabling
CONFIG_BOOTLOADER_MCUBOOT=yforipc_radio, the build fails during signing:
imgtool sign … --header-size 0 …
Error: Invalid value for -H/--header-size: Minimum value is 32
I attempted to set CONFIG_ROM_START_OFFSET=0x200 (and searched for MCUBOOT_HEADER_SIZE / related options), but the value is still resolved as 0 in .config, likely due to sysbuild/partition manager overrides.
Partition Manager layout appears correct for nRF5340 simultaneous DFU:
-
app-core secondary in external flash
-
net-core secondary in external flash
-
net-core primary via ram/flash simulator
The core question is:
What is the correct way in NCS 2.9.x to produce a properly signed/versioned net-core DFU image (with non-zero MCUboot header) so that b0n/MCUboot will accept the hash and it persists after reboot?
Is this expected to be handled via:
-
child-image config,
-
sysbuild config,
-
partition padding for cpunet,
-
or explicit imgtool args for the net-core image?
I can’t easily capture UART boot logs, but I can share partition reports, .config snippets, and the exact imgtool command line if needed.