/* ====================================================================
* CUSTOM ARCHITECTURAL LINKER WRAPPER FOR MONOLITHIC SDRAM EXECUTION
* ====================================================================
* Скрипт полностью повторяет идеологию NXP: код и данные работают
* в раздельных регионах SDRAM (0x80... и 0x8040...), но их LMA
* принудительно подменяется в непрерывный Flash-образ.
*
* Мы НЕ трогаем макросы GROUP_LINK_IN, что гарантирует сборку БЕЗ syntax error.
*/
/* 1. Подключаем базовые заголовочные макросы архитектуры Zephyr */
#include <zephyr/linker/sections.h>
#include <zephyr/devicetree.h>
#include <zephyr/linker/devicetree_regions.h>
#include <zephyr/linker/linker-defs.h>
#include <zephyr/linker/linker-tool.h>
/* 2. ПЕРЕОПРЕДЕЛЯЕМ ФИЗИЧЕСКУЮ ТАБЛИЦУ ПАМЯТИ ПО ЛОГИКЕ NXP
Мы используем документированный синтаксис GNU LD для разделения VMA/LMA регионов.
Синтаксис: ИМЯ : ORIGIN = VMA_ADDR, LENGTH = SIZE > LMA_REGION
Это заставляет ЛИНКЕР (а не препроцессор) автоматически перенаправлять
адреса загрузки (LMA) в PHYS_FLASH, сохраняя VMA в SDRAM. */
MEMORY
{
/* Реальная Flash-память чипа, куда программатор запишет бинарник (LMA) */
PHYS_FLASH (rx) : ORIGIN = 0x60000000, LENGTH = 0x400000 /* 4MB */
/* Переопределяем регион FLASH (который Zephyr создал для sdram_code).
Его VMA равен 0x80000000, но его LMA принудительно транслируется в PHYS_FLASH! */
FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x400000 > PHYS_FLASH
/* Переопределяем регион RAM (который Zephyr создал для sdram_data).
Его VMA равен 0x80400000, но его LMA также транслируется в PHYS_FLASH! */
RAM (wx) : ORIGIN = 0x80400000, LENGTH = 0x1C00000 > PHYS_FLASH
}
/* 3. НАСТРОЙКА СИСТЕМНЫХ МАКРОСОВ
Возвращаем макросы регионов в их заводское для Zephyr состояние,
чтобы внутренние скрипты kobject и драйверов не выдавали ошибки. */
#undef ROMABLE_REGION
#define ROMABLE_REGION FLASH
#undef RAMABLE_REGION
#define RAMABLE_REGION RAM
/* 4. Включаем оригинальный мастер-скрипт Zephyr для архитектуры ARM Cortex-M.
Синтаксис строк 155 и 391 останется заводским. Сборка пройдет успешно. */
#include <zephyr/arch/arm/cortex_m/scripts/linker.ld>
/* Финальная страховка */
#undef ROMABLE_REGION
#define ROMABLE_REGION FLASH