Author: Jean-François Milants <jf@codingfield.com>
Linker script: Update gcc_nrf52.ld to reflect changes done in gcc_nrf52-mcuboot.ld. The only change between the 2 linker scripts is the ORIGIN address of the flash memory allocated to InfiniTime. The MCUBoot one starts at 0x8000, which is the address that will be loaded by MCUBoot after the boot process. This linker script allow to run the application without MCUBoot by setting the origin address to 0x00. The APP_SIZE is the same for both linker scripts, but it could be set to a higher value in this one for development purposes.
gcc_nrf52.ld | 39 +++++++++++++++++++++++++++++++++++++--
diff --git a/gcc_nrf52.ld b/gcc_nrf52.ld index f9bc5b681fe19e68ac24b839d78afd53ceceb701..1bd5e82165222b6c19f71d8110f735b568e67f50 100644 --- a/gcc_nrf52.ld +++ b/gcc_nrf52.ld @@ -1,11 +1,46 @@ -/* Linker script to configure memory regions. */ +/**************************************************************** + * Memory map configuration for using application with MCU-boot * + ****************************************************************/ +/* + * Internal nRF52 flash memory: + * 0x00000000: MCUBoot(28 kB) + * 0x00007000: Reboot logs (4 kB) + * 0x00008000: MCUBoot header (32 bytes) + * 0x00008020: Application (463+ kB) + * 0x0007be50: MCUBoot image trailer (432 bytes) + * 0x0007c000: MCUBoot Scratch partition (4 kB) + * 0x0007d000: unused (12 kB) + * + * SPI flash: + * 0x00000000: Bootloader Assets, like Boot Graphic (256 kB) + * 0x00040000: Application 2 (including MCUBoot header) (464 kB) + * 0x000b4000: User files - littlefs (3376 kB) + * + * This linker script sets the origin of the application at 0x00 + * which means that the application must be linked with a start + * address at 0x00 and that it'll overwrite the bootloader. + * This is very practical when debugging and testing on + * the hardware with a SWD probe. + */ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) +MCUBOOT_SIZE = 0x8000; +SCRATCH_SIZE = 0x1000; +TLV_SIZE = 0x28; /* Metadata added by imgtool at the end of the image */ +SCRATCH_OFFSET = 0x7c000; +MCUBOOT_APP_IMAGE_HEADER_SIZE = 0x20; +MCUBOOT_APP_IMAGE_TRAILER_SIZE = 0x1b0; +APP_OFFSET = 0x00; +APP_SIZE = SCRATCH_OFFSET - MCUBOOT_SIZE - MCUBOOT_APP_IMAGE_HEADER_SIZE - MCUBOOT_APP_IMAGE_TRAILER_SIZE - TLV_SIZE; + MEMORY { - FLASH (rx) : ORIGIN = 0x00000, LENGTH = 0x78000 + /* MCUBOOT (r) : ORIGIN = 0x0, LENGTH = MCUBOOT_SIZE */ + FLASH (rx) : ORIGIN = APP_OFFSET, LENGTH = APP_SIZE + /* SCRATCH (r) : ORIGIN = SCRATCH_OFFSET, LENGTH = SCRATCH_SIZE */ + SPARE_SPACE (r) : ORIGIN = SCRATCH_OFFSET + SCRATCH_SIZE, LENGTH = 12K RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K }