InfiniTime.git

ref: 9196c18d376d4f18c686bcfec8550f9c8659d5ea

./gcc_nrf52.ld


/****************************************************************
 * 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
{
  /* 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
}

SECTIONS
{
  .noinit(NOLOAD):
  {
    PROVIDE(__start_noinit_data = .);
    *(.noinit)
    PROVIDE(__stop_noinit_data = .);
  } > RAM
} INSERT AFTER .bss

SECTIONS
{
  . = ALIGN(4);
  .mem_section_dummy_ram :
  {
  }
  .cli_sorted_cmd_ptrs :
  {
    PROVIDE(__start_cli_sorted_cmd_ptrs = .);
    KEEP(*(.cli_sorted_cmd_ptrs))
    PROVIDE(__stop_cli_sorted_cmd_ptrs = .);
  } > RAM
  .fs_data :
  {
    PROVIDE(__start_fs_data = .);
    KEEP(*(.fs_data))
    PROVIDE(__stop_fs_data = .);
  } > RAM
  .log_dynamic_data :
  {
    PROVIDE(__start_log_dynamic_data = .);
    KEEP(*(SORT(.log_dynamic_data*)))
    PROVIDE(__stop_log_dynamic_data = .);
  } > RAM
  .log_filter_data :
  {
    PROVIDE(__start_log_filter_data = .);
    KEEP(*(SORT(.log_filter_data*)))
    PROVIDE(__stop_log_filter_data = .);
  } > RAM


} INSERT AFTER .data;

SECTIONS
{
  .mem_section_dummy_rom :
  {
  }
  .sdh_soc_observers :
  {
    PROVIDE(__start_sdh_soc_observers = .);
    KEEP(*(SORT(.sdh_soc_observers*)))
    PROVIDE(__stop_sdh_soc_observers = .);
  } > FLASH
  .sdh_ble_observers :
  {
    PROVIDE(__start_sdh_ble_observers = .);
    KEEP(*(SORT(.sdh_ble_observers*)))
    PROVIDE(__stop_sdh_ble_observers = .);
  } > FLASH
  .sdh_req_observers :
  {
    PROVIDE(__start_sdh_req_observers = .);
    KEEP(*(SORT(.sdh_req_observers*)))
    PROVIDE(__stop_sdh_req_observers = .);
  } > FLASH
  .sdh_state_observers :
  {
    PROVIDE(__start_sdh_state_observers = .);
    KEEP(*(SORT(.sdh_state_observers*)))
    PROVIDE(__stop_sdh_state_observers = .);
  } > FLASH
  .sdh_stack_observers :
  {
    PROVIDE(__start_sdh_stack_observers = .);
    KEEP(*(SORT(.sdh_stack_observers*)))
    PROVIDE(__stop_sdh_stack_observers = .);
  } > FLASH
    .nrf_queue :
  {
    PROVIDE(__start_nrf_queue = .);
    KEEP(*(.nrf_queue))
    PROVIDE(__stop_nrf_queue = .);
  } > FLASH
    .nrf_balloc :
  {
    PROVIDE(__start_nrf_balloc = .);
    KEEP(*(.nrf_balloc))
    PROVIDE(__stop_nrf_balloc = .);
  } > FLASH
    .cli_command :
  {
    PROVIDE(__start_cli_command = .);
    KEEP(*(.cli_command))
    PROVIDE(__stop_cli_command = .);
  } > FLASH
  .crypto_data :
  {
    PROVIDE(__start_crypto_data = .);
    KEEP(*(SORT(.crypto_data*)))
    PROVIDE(__stop_crypto_data = .);
  } > FLASH
  .pwr_mgmt_data :
  {
    PROVIDE(__start_pwr_mgmt_data = .);
    KEEP(*(SORT(.pwr_mgmt_data*)))
    PROVIDE(__stop_pwr_mgmt_data = .);
  } > FLASH
  .log_const_data :
  {
    PROVIDE(__start_log_const_data = .);
    KEEP(*(SORT(.log_const_data*)))
    PROVIDE(__stop_log_const_data = .);
  } > FLASH
  .log_backends :
  {
    PROVIDE(__start_log_backends = .);
    KEEP(*(SORT(.log_backends*)))
    PROVIDE(__stop_log_backends = .);
  } > FLASH
    .nrf_balloc :
  {
    PROVIDE(__start_nrf_balloc = .);
    KEEP(*(.nrf_balloc))
    PROVIDE(__stop_nrf_balloc = .);
  } > FLASH

} INSERT AFTER .text


INCLUDE "./nrf_common.ld"