/memory.x
MEMORY {
    BOOT2 (r)   : ORIGIN = 0x10000000, LENGTH = 0x100
    FLASH (rx)  : ORIGIN = 0x10000100, LENGTH = 1024K - 0x100
    ARAM  (rw)  : ORIGIN = 0x20000000, LENGTH = 252K
    RAM   (rw)  : ORIGIN = 0x2003F000, LENGTH = 8K
    RAM2  (rw)  : ORIGIN = 0x20041000, LENGTH = 4K
}

EXTERN(BOOT2_FIRMWARE)

SECTIONS {
    /* ### Boot loader */
    .boot2 ORIGIN(BOOT2) :
    {
        KEEP(*(.boot2));
    } > BOOT2
} INSERT BEFORE .text;

SECTIONS {
    .appram (NOLOAD) : {
        *(.appram);
        . = ALIGN(4);
    } > ARAM
    _appram = ADDR(.appram);
    _appram_end = ADDR(.appram) + SIZEOF(.appram);
} INSERT BEFORE .data;

SECTIONS {
    .ram2 : {
        *(.ram2);
        . = ALIGN(4);
    } > RAM2 AT >FLASH
    __sram2 = ADDR(.ram2);
    __eram2 = ADDR(.ram2) + SIZEOF(.ram2);
    __lram2 = LOADADDR(.ram2);
} INSERT AFTER .bss;