Hello,
I try to figure out, how to correctly setup MCUboot for an nrf5340, so that:
- Application is updatable
- BT Stack is updatable
- Firmware Updates are encrypted and signed
- Updates are stored in external flash memory
- No need to update the bootloader itself
- Updates are stored on the external flash by some application specific protocol.
For that task, I upgraded our project to nrfconnect/sdk-nrf version v2.7.99-cs2. My current understanding is, that I want to use Sysbuild and have to define a static partition. I haven't found any comprehensive documentation, that defines exactly, which partitions are required for the given setup. So, I search for something in the examples, that could come close to my setup. The result of this example `pm_static.yml` looks like this:
app: address: 0x10200 region: flash_primary size: 0xdfe00 mcuboot: address: 0x0 region: flash_primary size: 0x10000 mcuboot_pad: address: 0x10000 region: flash_primary size: 0x200 mcuboot_primary: address: 0x10000 region: flash_primary size: 0xe0000 span: [mcuboot_pad, app] mcuboot_primary_app: address: 0x10200 region: flash_primary size: 0xdfe00 span: [app] settings_storage: address: 0xf0000 region: flash_primary size: 0x10000 mcuboot_primary_1: address: 0x0 size: 0x40000 device: nordic_ram_flash_controller region: ram_flash mcuboot_secondary: address: 0x00000 size: 0xe0000 device: DT_CHOSEN(nordic_pm_ext_flash) region: external_flash mcuboot_secondary_1: address: 0xe0000 size: 0x40000 device: DT_CHOSEN(nordic_pm_ext_flash) region: external_flash external_flash: address: 0x120000 size: 0x6e0000 device: DT_CHOSEN(nordic_pm_ext_flash) region: external_flash pcd_sram: address: 0x20000000 size: 0x2000 region: sram_primary
However, in the resulting `partition_manager_report`:
external_flash (0x800000 - 8192kB): +------------------------------------------------+ | 0x0: mcuboot_secondary (0xe0000 - 896kB) | | 0xe0000: mcuboot_secondary_1 (0x40000 - 256kB) | | 0x120000: external_flash (0x6e0000 - 7040kB) | +------------------------------------------------+ flash_primary (0x100000 - 1024kB): +--------------------------------------------------+ | 0x0: mcuboot (0x10000 - 64kB) | +---0x10000: mcuboot_primary (0xe0000 - 896kB)-----+ | 0x10000: mcuboot_pad (0x200 - 512B) | +---0x10200: mcuboot_primary_app (0xdfe00 - 895kB)-+ | 0x10200: app (0xdfe00 - 895kB) | +--------------------------------------------------+ | 0xf0000: settings_storage (0x10000 - 64kB) | +--------------------------------------------------+ otp (0x2fc - 764B): +------------------------------+ | 0xff8100: otp (0x2fc - 764B) | +------------------------------+ sram_primary (0x80000 - 512kB): +-----------------------------------------------+ | 0x20000000: pcd_sram (0x2000 - 8kB) | | 0x20002000: sram_primary (0x6e000 - 440kB) | | 0x20070000: rpmsg_nrf53_sram (0x10000 - 64kB) | +-----------------------------------------------+
the partition `mcuboot_primary_1` is simply missing (and later the compilation of `nrf/modules/mcuboot/hooks/nrf53_hooks.c` fails with an undeclared symbol `PM_MCUBOOT_PRIMARY_1_ADDRESS`.
I found this warning in the DTS parsing:
warning: FLASH_SIMULATOR (defined at drivers/flash/Kconfig.simulator:6) was assigned the value 'y' but got the value 'n'. Check these unsatisfied dependencies: DT_HAS_ZEPHYR_SIM_FLASH_ENABLED (=n). See http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_FLASH_SIMULATOR and/or look up FLASH_SIMULATOR in the menuconfig/guiconfig interface.
The referenced documentation just contains the sentence: "Enable the flash simulator."
What do I have to do, to use MCUBoot?
Is there any comprehensive documentation, that clearly states, what is required to completely configure the bootloader?