mirror of
https://github.com/InfiniTimeOrg/InfiniTime.git
synced 2024-12-23 17:53:25 +03:00
98d1de070a
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.
179 lines
4.5 KiB
Plaintext
179 lines
4.5 KiB
Plaintext
/****************************************************************
|
|
* 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"
|