/* ====================================================================
* CUSTOM ARCHITECTURAL LINKER WRAPPER FOR MONOLITHIC SDRAM EXECUTION
* ====================================================================
* Авторы концепции: NXP RAMLOADER Policy & Zephyr OS Core Architecture.
*
* Мы не трогаем макросы GROUP_LINK_IN, чтобы избежать синтаксических ошибок.
* Вместо этого мы объявляем регион PHYS_FLASH и принудительно связываем
* системное имя памяти "FLASH" с адресом 0x60000000 через алиас линкера.
*/
/* 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. Объявляем физическую память Flash для хранения прошивки (LMA) */
MEMORY
{
PHYS_FLASH (rx) : ORIGIN = 0x60000000, LENGTH = 0x400000 /* 4MB встроенной Flash RT1024 */
}
/* 3. Переопределяем базовые регионы для макросов Zephyr до подключения мастера.
Заставляем систему считать, что ROMABLE (LMA) — это PHYS_FLASH,
а RAMABLE (VMA выполнения) — это наш регион RAM (внешняя SDRAM). */
#undef ROMABLE_REGION
#define ROMABLE_REGION PHYS_FLASH
#undef RAMABLE_REGION
#define RAMABLE_REGION RAM
/* 4. ГЛАВНЫЙ АРХИТЕКТУРНЫЙ ПЕРЕХВАТ ДЛЯ КОРРЕКТНОЙ СБОРКИ PJSIP:
Оригинальный скрипт Zephyr внутри себя принудительно сделает переопределение:
"#define ROMABLE_REGION FLASH".
Поэтому мы даем команду самому GNU Линкеру: если секция будет отправлена
в регион памяти с именем "FLASH", перенаправь этот физический LMA-поток
в наш регион PHYS_FLASH (на адрес 0x60000000). */
REGION_ALIAS("FLASH", PHYS_FLASH);
/* 5. Включаем оригинальный мастер-скрипт Zephyr для архитектуры ARM Cortex-M.
Препроцессор развернет его штатно, без сбоев синтаксиса и пустых аргументов. */
#include <zephyr/arch/arm/cortex_m/scripts/linker.ld>
/* Финальная страховка: сбрасываем макрос обратно в PHYS_FLASH, если оригинальный
скрипт переопределил текстовый дефайн в середине или конце файла. */
#undef ROMABLE_REGION
#define ROMABLE_REGION PHYS_FLASH