mirror of
https://github.com/apache/nuttx.git
synced 2025-01-13 02:48:37 +08:00
boards/xtensa: merge MCUBoot and Simple Boot linker scripts on ESP32|S2
This commit is contained in:
parent
aef24f5f3c
commit
91511ae280
2 changed files with 105 additions and 19 deletions
|
@ -28,6 +28,39 @@ ENTRY(__start);
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ESP32_APP_FORMAT_MCUBOOT
|
||||||
|
.metadata :
|
||||||
|
{
|
||||||
|
/* Magic for load header */
|
||||||
|
|
||||||
|
LONG(0xace637d3)
|
||||||
|
|
||||||
|
/* Application entry point address */
|
||||||
|
|
||||||
|
KEEP(*(.entry_addr))
|
||||||
|
|
||||||
|
/* IRAM metadata:
|
||||||
|
* - Destination address (VMA) for IRAM region
|
||||||
|
* - Flash offset (LMA) for start of IRAM region
|
||||||
|
* - Size of IRAM region
|
||||||
|
*/
|
||||||
|
|
||||||
|
LONG(ADDR(.iram0.vectors))
|
||||||
|
LONG(LOADADDR(.iram0.vectors))
|
||||||
|
LONG(LOADADDR(.iram0.text) + SIZEOF(.iram0.text) - LOADADDR(.iram0.vectors))
|
||||||
|
|
||||||
|
/* DRAM metadata:
|
||||||
|
* - Destination address (VMA) for DRAM region
|
||||||
|
* - Flash offset (LMA) for start of DRAM region
|
||||||
|
* - Size of DRAM region
|
||||||
|
*/
|
||||||
|
|
||||||
|
LONG(ADDR(.dram0.data))
|
||||||
|
LONG(LOADADDR(.dram0.data))
|
||||||
|
LONG(SIZEOF(.dram0.data))
|
||||||
|
} >metadata
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Send .iram0 code to iram */
|
/* Send .iram0 code to iram */
|
||||||
|
|
||||||
.iram0.vectors :
|
.iram0.vectors :
|
||||||
|
@ -396,20 +429,28 @@ SECTIONS
|
||||||
* be equal.
|
* be equal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_ESP32_APP_FORMAT_MCUBOOT
|
||||||
.flash.rodata_dummy (NOLOAD) :
|
.flash.rodata_dummy (NOLOAD) :
|
||||||
{
|
{
|
||||||
. = ALIGN(0x10000);
|
. = ALIGN(0x10000);
|
||||||
} > ROM
|
} > ROM
|
||||||
|
#endif
|
||||||
|
|
||||||
.flash.rodata :
|
.flash.rodata : ALIGN(0x10000)
|
||||||
{
|
{
|
||||||
_rodata_reserved_start = ABSOLUTE(.);
|
_rodata_reserved_start = ABSOLUTE(.);
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_srodata = ABSOLUTE(.);
|
_srodata = ABSOLUTE(.);
|
||||||
*(EXCLUDE_FILE (*libarch.a:esp32_spiflash.* *libarch.a:esp32_spicache.*
|
*(EXCLUDE_FILE (*libarch.a:esp32_spiflash.* esp32_start.*
|
||||||
*libarch.a:esp_loader.* esp32_start.*) .rodata)
|
*libarch.a:*esp_loader.*
|
||||||
*(EXCLUDE_FILE (*libarch.a:esp32_spiflash.* *libarch.a:esp32_spicache.*
|
*libarch.a:*uart_hal.*
|
||||||
*libarch.a:esp_loader.* esp32_start.*) .rodata.*)
|
*libarch.a:*mmu_hal.*
|
||||||
|
) .rodata)
|
||||||
|
*(EXCLUDE_FILE (*libarch.a:esp32_spiflash.* esp32_start.*
|
||||||
|
*libarch.a:*esp_loader.*
|
||||||
|
*libarch.a:*uart_hal.*
|
||||||
|
*libarch.a:*mmu_hal.*
|
||||||
|
) .rodata.*)
|
||||||
*(.srodata.*)
|
*(.srodata.*)
|
||||||
*(.rodata)
|
*(.rodata)
|
||||||
*(.rodata.*)
|
*(.rodata.*)
|
||||||
|
@ -504,13 +545,15 @@ SECTIONS
|
||||||
* be equal.
|
* be equal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_ESP32_APP_FORMAT_MCUBOOT
|
||||||
.flash.text_dummy (NOLOAD) :
|
.flash.text_dummy (NOLOAD) :
|
||||||
{
|
{
|
||||||
. += SIZEOF(.flash.rodata);
|
. += SIZEOF(.flash.rodata);
|
||||||
. = ALIGN(0x10000);
|
. = ALIGN(0x10000);
|
||||||
} >default_code_seg AT> ROM
|
} >default_code_seg AT> ROM
|
||||||
|
#endif
|
||||||
|
|
||||||
.flash.text :
|
.flash.text : ALIGN(0x00010000)
|
||||||
{
|
{
|
||||||
_stext = .;
|
_stext = .;
|
||||||
_text_start = ABSOLUTE(.);
|
_text_start = ABSOLUTE(.);
|
|
@ -1,5 +1,5 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* boards/xtensa/esp32s2/common/scripts/simple_boot_sections.ld
|
* boards/xtensa/esp32s2/common/scripts/esp32s2_sections.ld
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
@ -28,6 +28,39 @@ ENTRY(__start);
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ESP32S2_APP_FORMAT_MCUBOOT
|
||||||
|
.metadata :
|
||||||
|
{
|
||||||
|
/* Magic for load header */
|
||||||
|
|
||||||
|
LONG(0xace637d3)
|
||||||
|
|
||||||
|
/* Application entry point address */
|
||||||
|
|
||||||
|
KEEP(*(.entry_addr))
|
||||||
|
|
||||||
|
/* IRAM metadata:
|
||||||
|
* - Destination address (VMA) for IRAM region
|
||||||
|
* - Flash offset (LMA) for start of IRAM region
|
||||||
|
* - Size of IRAM region
|
||||||
|
*/
|
||||||
|
|
||||||
|
LONG(ADDR(.iram0.vectors))
|
||||||
|
LONG(LOADADDR(.iram0.vectors))
|
||||||
|
LONG(LOADADDR(.iram0.text) + SIZEOF(.iram0.text) - LOADADDR(.iram0.vectors))
|
||||||
|
|
||||||
|
/* DRAM metadata:
|
||||||
|
* - Destination address (VMA) for DRAM region
|
||||||
|
* - Flash offset (LMA) for start of DRAM region
|
||||||
|
* - Size of DRAM region
|
||||||
|
*/
|
||||||
|
|
||||||
|
LONG(ADDR(.dram0.data))
|
||||||
|
LONG(LOADADDR(.dram0.data))
|
||||||
|
LONG(SIZEOF(.dram0.data))
|
||||||
|
} >metadata
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Send .iram0 code to iram */
|
/* Send .iram0 code to iram */
|
||||||
|
|
||||||
.iram0.vectors : ALIGN(4)
|
.iram0.vectors : ALIGN(4)
|
||||||
|
@ -80,6 +113,7 @@ SECTIONS
|
||||||
esp32s2_region.*(.text .text.* .literal .literal.*)
|
esp32s2_region.*(.text .text.* .literal .literal.*)
|
||||||
|
|
||||||
*libarch.a:*esp_loader.*(.literal .text .literal.* .text.*)
|
*libarch.a:*esp_loader.*(.literal .text .literal.* .text.*)
|
||||||
|
*libarch.a:esp32s2_spiflash.*(.literal .text .literal.* .text.*)
|
||||||
*libarch.a:*brownout_hal.*(.text .text.* .literal .literal.*)
|
*libarch.a:*brownout_hal.*(.text .text.* .literal .literal.*)
|
||||||
*libarch.a:*cpu.*(.text .text.* .literal .literal.*)
|
*libarch.a:*cpu.*(.text .text.* .literal .literal.*)
|
||||||
*libarch.a:*gpio_hal.*(.text .text.* .literal .literal.*)
|
*libarch.a:*gpio_hal.*(.text .text.* .literal .literal.*)
|
||||||
|
@ -231,6 +265,7 @@ SECTIONS
|
||||||
esp32s2_region.*(.rodata .rodata.*)
|
esp32s2_region.*(.rodata .rodata.*)
|
||||||
|
|
||||||
*libarch.a:*esp_loader.*(.rodata .rodata.*)
|
*libarch.a:*esp_loader.*(.rodata .rodata.*)
|
||||||
|
*libarch.a:esp32s2_spiflash.*(.rodata .rodata.*)
|
||||||
*libarch.a:*brownout.*(.rodata .rodata.*)
|
*libarch.a:*brownout.*(.rodata .rodata.*)
|
||||||
*libarch.a:*cpu.*(.rodata .rodata.*)
|
*libarch.a:*cpu.*(.rodata .rodata.*)
|
||||||
*libarch.a:*gpio_hal.*(.rodata .rodata.*)
|
*libarch.a:*gpio_hal.*(.rodata .rodata.*)
|
||||||
|
@ -313,17 +348,20 @@ SECTIONS
|
||||||
. = ALIGN(0x10000);
|
. = ALIGN(0x10000);
|
||||||
} > ROM
|
} > ROM
|
||||||
|
|
||||||
.flash.rodata :
|
.flash.rodata : ALIGN(0x10000)
|
||||||
{
|
{
|
||||||
_rodata_reserved_start = ABSOLUTE(.);
|
_rodata_reserved_start = ABSOLUTE(.);
|
||||||
|
|
||||||
_srodata = ABSOLUTE(.);
|
_srodata = ABSOLUTE(.);
|
||||||
*(EXCLUDE_FILE (esp32s2_start.*) .rodata)
|
*(EXCLUDE_FILE (esp32s2_start.* esp32s2_region.*
|
||||||
*(EXCLUDE_FILE (esp32s2_start.*) .rodata.*)
|
*libarch.a:*esp_loader.*
|
||||||
|
*libarch.a:esp32s2_spiflash.*
|
||||||
*(.srodata.*)
|
*libarch.a:*cache_hal.* *libarch.a:*mmu_hal.*
|
||||||
*(.rodata)
|
*libarch.a:*mpu_hal.*) .rodata)
|
||||||
*(.rodata.*)
|
*(EXCLUDE_FILE (esp32s2_start.* esp32s2_region.*
|
||||||
|
*libarch.a:*esp_loader.*
|
||||||
|
*libarch.a:esp32s2_spiflash.*
|
||||||
|
*libarch.a:*cache_hal.* *libarch.a:*mmu_hal.*
|
||||||
|
*libarch.a:*mpu_hal.*) .rodata.*)
|
||||||
|
|
||||||
#ifdef CONFIG_ESPRESSIF_WIRELESS
|
#ifdef CONFIG_ESPRESSIF_WIRELESS
|
||||||
*(.rodata_wlog_verbose.*)
|
*(.rodata_wlog_verbose.*)
|
||||||
|
@ -376,11 +414,11 @@ SECTIONS
|
||||||
*(.lit4.*)
|
*(.lit4.*)
|
||||||
*(.gnu.linkonce.lit4.*)
|
*(.gnu.linkonce.lit4.*)
|
||||||
_lit4_end = ABSOLUTE(.);
|
_lit4_end = ABSOLUTE(.);
|
||||||
|
|
||||||
/* TLS data. */
|
/* TLS data. */
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_thread_local_start = ABSOLUTE(.);
|
_thread_local_start = ABSOLUTE(.);
|
||||||
|
|
||||||
_stdata = ABSOLUTE(.);
|
_stdata = ABSOLUTE(.);
|
||||||
*(.tdata .tdata.* .gnu.linkonce.td.*);
|
*(.tdata .tdata.* .gnu.linkonce.td.*);
|
||||||
_etdata = ABSOLUTE(.);
|
_etdata = ABSOLUTE(.);
|
||||||
|
@ -389,9 +427,8 @@ SECTIONS
|
||||||
_etbss = ABSOLUTE(.);
|
_etbss = ABSOLUTE(.);
|
||||||
|
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
|
|
||||||
_rodata_reserved_end = ABSOLUTE(.);
|
_rodata_reserved_end = ABSOLUTE(.);
|
||||||
} >default_rodata_seg AT>ROM
|
} >drom0_0_seg AT>ROM
|
||||||
_rodata_reserved_align = ALIGNOF(.flash.rodata);
|
_rodata_reserved_align = ALIGNOF(.flash.rodata);
|
||||||
|
|
||||||
_image_irom_vma = ADDR(.flash.text);
|
_image_irom_vma = ADDR(.flash.text);
|
||||||
|
@ -409,13 +446,19 @@ SECTIONS
|
||||||
* be equal.
|
* be equal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_ESP32S2_RUN_IRAM
|
||||||
.flash.text_dummy (NOLOAD) :
|
.flash.text_dummy (NOLOAD) :
|
||||||
{
|
{
|
||||||
|
/* This section is required to skip .flash.rodata area because irom0_0_seg
|
||||||
|
* and drom0_0_seg reflect the same address space on different buses.
|
||||||
|
*/
|
||||||
|
|
||||||
. += SIZEOF(.flash.rodata);
|
. += SIZEOF(.flash.rodata);
|
||||||
. = ALIGN(0x10000);
|
. = ALIGN(0x10000);
|
||||||
} >default_code_seg AT> ROM
|
} >default_code_seg AT> ROM
|
||||||
|
#endif
|
||||||
|
|
||||||
.flash.text :
|
.flash.text : ALIGN(0x00010000)
|
||||||
{
|
{
|
||||||
_stext = .;
|
_stext = .;
|
||||||
|
|
Loading…
Reference in a new issue