Загрузка данных


--- a/include/zephyr/arch/arm/cortex_m/scripts/linker.ld
+++ b/include/zephyr/arch/arm/cortex_m/scripts/linker.ld
@@ -87,6 +87,9 @@ MEMORY
 #endif
     FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE
     RAM   (wx) : ORIGIN = RAM_ADDR, LENGTH = RAM_SIZE
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+    NXP_FLASH_LMA (rx) : ORIGIN = 0x60000000, LENGTH = 4M
+#endif
 #if defined(CONFIG_LINKER_DEVNULL_MEMORY)
     DEVNULL_ROM (rx) : ORIGIN = DEVNULL_ADDR, LENGTH = DEVNULL_SIZE
 #endif
@@ -95,6 +98,14 @@ MEMORY
     IDT_LIST (wx) : ORIGIN = 0xFFFF7FFF, LENGTH = 32K
     }
 
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+#undef GROUP_ROM_LINK_IN
+#undef GROUP_DATA_LINK_IN
+
+#define GROUP_ROM_LINK_IN(vregion, lregion) > lregion AT> NXP_FLASH_LMA
+#define GROUP_DATA_LINK_IN(vregion, lregion) > vregion AT> NXP_FLASH_LMA
+#endif
+
 ENTRY(CONFIG_KERNEL_ENTRY)
 
 SECTIONS
@@ -124,7 +135,10 @@ SECTIONS
 
        __rom_region_start = ROM_ADDR;
 
-    SECTION_PROLOGUE(rom_start,,)
+    SECTION_PROLOGUE(rom_start,,) 
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+     ALIGN_WITH_INPUT
+#endif
        {
 
 /* Located in generated directory. This file is populated by calling
@@ -132,8 +146,11 @@ SECTIONS
  * table and debug information.
  */
 #include <snippets-rom-start.ld>
-
+#if !defined(CONFIG_SDRAM_LMA_ADJUST)
        } GROUP_LINK_IN(ROMSTART_REGION)
+#else
+        } > FLASH AT> NXP_FLASH_LMA
+#endif
 
 #ifdef CONFIG_CODE_DATA_RELOCATION
 
@@ -141,7 +158,10 @@ SECTIONS
 
 #endif /* CONFIG_CODE_DATA_RELOCATION */
 
-    SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
+    SECTION_PROLOGUE(_TEXT_SECTION_NAME,,) 
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+     ALIGN_WITH_INPUT
+#endif
        {
        __text_region_start = .;
 
@@ -158,8 +178,11 @@ SECTIONS
         */
        *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
        . = ALIGN(4);
-
+#if !defined(CONFIG_SDRAM_LMA_ADJUST)
        } GROUP_LINK_IN(ROMABLE_REGION)
+#else
+        } > FLASH AT> NXP_FLASH_LMA
+#endif
 
        __text_region_end = .;
 
@@ -174,6 +197,9 @@ SECTIONS
 #endif
 
        SECTION_PROLOGUE(.ARM.exidx,,)
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+     ALIGN_WITH_INPUT
+#endif
        {
        /*
         * This section, related to stack and exception unwinding, is placed
@@ -186,8 +212,11 @@ SECTIONS
        *(.ARM.exidx* gnu.linkonce.armexidx.*)
 #endif
        __exidx_end = .;
+#if !defined(CONFIG_SDRAM_LMA_ADJUST)
        } GROUP_LINK_IN(ROMABLE_REGION)
-
+#else
+        } > FLASH AT> NXP_FLASH_LMA
+#endif
        __rodata_region_start = .;
 
 #include <zephyr/linker/common-rom.ld>
@@ -198,6 +227,9 @@ SECTIONS
 #include <zephyr/linker/thread-local-storage.ld>
 
     SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+     ALIGN_WITH_INPUT
+#endif
        {
        *(.rodata)
        *(".rodata.*")
@@ -221,8 +253,11 @@ SECTIONS
         * usually 4k aligned.
         */
        . = ALIGN(4);
+#if !defined(CONFIG_SDRAM_LMA_ADJUST)
        } GROUP_LINK_IN(ROMABLE_REGION)
-
+#else
+        } > FLASH AT> NXP_FLASH_LMA
+#endif
 #include <zephyr/linker/cplusplus-rom.ld>
 
 #if defined(CONFIG_BUILD_ALIGN_LMA) || !defined(CONFIG_XIP)
@@ -236,6 +271,12 @@ SECTIONS
        __rodata_region_end = .;
        MPU_ALIGN(__rodata_region_end - ADDR(rom_start));
        } GROUP_LINK_IN(ROMABLE_REGION)
+#elif defined(CONFIG_SDRAM_LMA_ADJUST)
+    SECTION_PROLOGUE(padding_section,,) ALIGN_WITH_INPUT
+       {
+       __rodata_region_end = .;
+       MPU_ALIGN(__rodata_region_end - ADDR(rom_start));
+       } > FLASH AT> NXP_FLASH_LMA
 #else
        __rodata_region_end = .;
        MPU_ALIGN(__rodata_region_end - ADDR(rom_start));
@@ -301,7 +342,6 @@ SECTIONS
 #include <linker_sram_data_relocate.ld>
 #endif
        __data_end = .;
-
        } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
     __data_size = __data_end - __data_start;
     __data_load_start = LOADADDR(_DATA_SECTION_NAME);
@@ -411,11 +451,18 @@ GROUP_END(DTCM)
 
 /* Must be last in romable region */
 SECTION_PROLOGUE(.last_section,,)
+#if defined(CONFIG_SDRAM_LMA_ADJUST)
+     ALIGN_WITH_INPUT
+#endif
 {
   /* .last_section contains a fixed word to ensure location counter and actual
    * rom region data usage match when CONFIG_LINKER_LAST_SECTION_ID=y. */
   KEEP(*(.last_section))
+#if !defined(CONFIG_SDRAM_LMA_ADJUST)
 } GROUP_LINK_IN(ROMABLE_REGION)
+#else
+} > FLASH AT> NXP_FLASH_LMA
+#endif