Hello,
I have a project that contains the b0+mcuboot+app. My project works but now I would like to add "data sharing" in order to retrieve some information in my application about the mcuboot (currently used slot, version number).
I am using the nRF Connext SDK V2.7.0 and I am using the nrf52840DK.
Here is the config I added in my <Project>\Application\boards\<board>.overlay:
/ {
sram@2003F000 {
compatible = "zephyr,memory-region", "mmio-sram";
reg = <0x2003F000 DT_SIZE_K(1)>;
zephyr,memory-region = "RetainedMem";
status = "okay";
retainedmem {
compatible = "zephyr,retained-ram";
status = "okay";
#address-cells = <1>;
#size-cells = <1>;
boot_info0: boot_info@0 {
compatible = "zephyr,retention";
status = "okay";
reg = <0x0 0x100>;
};
retention1: retention@100 {
compatible = "zephyr,retention";
status = "okay";
reg = <0x100 0x101>;
};
};
};
/*
* In some default configurations within the nRF Connect SDK,
* e.g. on nRF52840, the chosen zephyr,entropy node is &cryptocell.
* This devicetree overlay ensures that default is overridden wherever it
* is set, as this application uses the RNG node for entropy exclusively.
*/
chosen {
//zephyr,entropy = &rng;
zephyr,bootloader-info = &boot_info0;
//zephyr,boot-mode = &retention1;
};
};
&sram0 {
reg = <0x20000000 DT_SIZE_K(255)>;
};
Here is what I put in my <Project>\Application\sysbuild\mcuboot\boards\<board>.overlay:
/* SPDX-License-Identifier: Apache-2.0 */
#include "../../../boards/<board>.overlay"
/ {
chosen {
zephyr,code-partition = &boot_partition;
};
};
Here is what I put in my <Project>\Application\sysbuild\mcuboot\prj.conf:
#Adds a bootloader information sharing system which allows for retreiving data from the bootloader when data sharing is enabled: CONFIG_RETAINED_MEM=y CONFIG_RETENTION=y CONFIG_BOOT_SHARE_DATA=y CONFIG_BOOT_SHARE_DATA_BOOTINFO=y CONFIG_BOOT_SHARE_BACKEND_RETENTION=y CONFIG_FLASH=y CONFIG_FLASH_MAP=y
Here is what I put in my <Project>\Application\prj.conf:
#Adds a bootloader information sharing system which allows for retreiving data from the bootloader when data sharing is enabled: CONFIG_RETAINED_MEM=y CONFIG_RETENTION=y CONFIG_RETENTION_BOOTLOADER_INFO=y CONFIG_RETENTION_BOOTLOADER_INFO_TYPE_MCUBOOT=y CONFIG_SETTINGS=y CONFIG_SETTINGS_RUNTIME=y CONFIG_RETENTION_BOOTLOADER_INFO_OUTPUT_SETTINGS=y
I use a pm_static.yml file to define my partitions:
EMPTY_0:
address: 0x19200
end_address: 0x1a000
placement:
before:
- s1_pad
region: flash_primary
size: 0xe00
EMPTY_1:
address: 0x2a200
end_address: 0x2b000
placement:
before:
- mcuboot_pad
region: flash_primary
size: 0xe00
app:
address: 0x2b200
end_address: 0xEC000
region: flash_primary
size: 0xc0e00
app_image:
address: 0x2b200
end_address: 0xEC000
orig_span: &id001
- app
region: flash_primary
size: 0xC0E00
span: *id001
b0:
address: 0x0
end_address: 0x8000
placement:
after:
- start
region: flash_primary
size: 0x8000
b0_container:
address: 0x0
end_address: 0x9000
orig_span: &id002
- b0
- provision
region: flash_primary
size: 0x9000
span: *id002
mcuboot:
address: 0x9200
end_address: 0x19200
placement:
before:
- mcuboot_primary
region: flash_primary
sharers: 0x1
size: 0x10000
mcuboot_pad:
address: 0x2b000
end_address: 0x2b200
placement:
align:
start: 0x1000
before:
- mcuboot_primary_app
region: flash_primary
sharers: 0x2
size: 0x200
mcuboot_primary:
address: 0x2b000
end_address: 0xEC000
orig_span: &id003
- mcuboot_pad
- app
region: flash_primary
sharers: 0x1
size: 0xC1000
span: *id003
mcuboot_primary_app:
address: 0x2b200
end_address: 0xEC000
orig_span: &id004
- app
region: flash_primary
size: 0xC0E00
span: *id004
mcuboot_secondary:
address: 0xEC000
end_address: 0xfc000
placement:
after:
- mcuboot_primary
align:
start: 0x1000
align_next: 0x1000
region: flash_primary
share_size:
- mcuboot_primary
size: 0x10000
provision:
address: 0x8000
end_address: 0x9000
placement:
after:
- b0
align:
start: 0x1000
region: flash_primary
size: 0x1000
s0:
address: 0x9000
end_address: 0x19200
orig_span: &id005
- s0_pad
- mcuboot
region: flash_primary
size: 0x10200
span: *id005
s0_image:
address: 0x9200
end_address: 0x19200
orig_span: &id006
- mcuboot
region: flash_primary
size: 0x10000
span: *id006
s0_pad:
address: 0x9000
end_address: 0x9200
placement:
after:
- b0_container
align:
start: 0x1000
region: flash_primary
share_size:
- mcuboot_pad
size: 0x200
s1:
address: 0x1a000
end_address: 0x2a200
orig_span: &id007
- s1_pad
- s1_image
region: flash_primary
size: 0x10200
span: *id007
s1_image:
address: 0x1a200
end_address: 0x2a200
placement:
after:
- s1_pad
- s0
region: flash_primary
share_size:
- mcuboot
size: 0x10000
s1_pad:
address: 0x1a000
end_address: 0x1a200
placement:
after:
- s0
align:
start: 0x1000
region: flash_primary
share_size:
- mcuboot_pad
size: 0x200
settings_storage:
address: 0xfc000
end_address: 0x100000
placement:
align:
start: 0x1000
before:
- end
region: flash_primary
size: 0x4000
sram_primary:
address: 0x20000000
end_address: 0x20040000
region: sram_primary
size: 0x40000
Is there anything else I need to indicate in this file to take into account "data sharing"?
The compilation of this project works but here are the logs I get when I run the code:
00> *** Booting MCUboot v2.1.0-dev-daf2946a0f07 *** 00> *** Using nRF Connect SDK v2.7.0-5cb85570ca43 *** 00> *** Using Zephyr OS v3.6.99-100befc70c74 *** 00> I: Starting bootloader 00> I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 00> I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 00> I: Boot source: none 00> I: Image index: 0, Swap type: none 00> I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 00> I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 00> I: Boot source: none 00> I: Image index: 1, Swap type: none 00> E: Failed to add data to shared memory area. 00> E: Unable to find bootable image
boot_add_data_to_shared_area(…) return rc=2 (SHARED_MEMORY_OVERFLOW)
Could you tell me what I forgot?
Thanks