link.lds 3.2 KB
Newer Older
1
/* Define the flash max size */
G
greedyhao 已提交
2
__max_flash_size = 1024k;
3

G
greedyhao 已提交
4
__data_ram_size = 8k;
G
greedyhao 已提交
5
__stack_ram_size = 4k;
G
greedyhao 已提交
6
__comm_ram_size = 83k;
G
greedyhao 已提交
7
__heap_ram_size = 29k;
G
greedyhao 已提交
8

9 10
__base = 0x10000000;

G
greedyhao 已提交
11 12 13
__data_vma = 0x11000;
__stack_vma = __data_vma + __data_ram_size;
__comm_vma = __stack_vma + __stack_ram_size;
G
greedyhao 已提交
14 15 16
__heap_vma = __comm_vma + __comm_ram_size;

__ram1_vma = 0x50000;
17 18 19 20 21

MEMORY
{
    init            : org = __base,             len = 512
    flash(rx)       : org = __base + 512,       len = __max_flash_size
G
greedyhao 已提交
22 23
    comm(rx)        : org = __comm_vma,         len = __comm_ram_size

G
greedyhao 已提交
24 25
    data            : org = __data_vma,         len = __data_ram_size
    stack           : org = __stack_vma,        len = __stack_ram_size
G
greedyhao 已提交
26 27
    heap            : org = __heap_vma,         len = __heap_ram_size
    ram1(rx)        : org = __ram1_vma,         len = 0x7a00
28 29 30 31 32 33 34 35
}

SECTIONS
{
    .init : {
        *(.reset)
    } > init

G
greedyhao 已提交
36
    .ram1 __ram1_vma : {
G
greedyhao 已提交
37 38 39 40 41 42 43 44 45 46 47
        . = ALIGN(4);
        PROVIDE(__ctors_start__ = .);
        KEEP (*(SORT(.init_array.*)))
        KEEP (*(.init_array))
        PROVIDE(__ctors_end__ = .);

        . = ALIGN(4);
        *components*drivers**.o (.text*)
        *device.o (.text*)
        *components.o (.text*)
        *idle.o (.text*)
G
greedyhao 已提交
48
    } > ram1 AT > flash
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

    .rti : {
        . = ALIGN(4);
        /* section information for initial */
        __rt_init_start = .;
        KEEP(*(SORT(.rti_fn*)))
        __rt_init_end = .;

        . = ALIGN(4);
        __fsymtab_start = .;
        KEEP(*(FSymTab))
        __fsymtab_end = .;

        . = ALIGN(4);
        __vsymtab_start = .;
        KEEP(*(VSymTab))
        __vsymtab_end = .;
G
greedyhao 已提交
66 67 68 69 70

        . = ALIGN(32);
    } > ram1 AT > flash

    .comm : {
G
greedyhao 已提交
71
        . = ALIGN(4);
G
greedyhao 已提交
72
        KEEP(*(.vector))
G
greedyhao 已提交
73 74 75 76
        EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *romfs.o 
        *lib_a**.o *divdi3.o *moddi3.o *divdf3.o *muldf3.o *eqtf2.o *getf2.o
        *letf2.o *multf3.o *subtf3.o *fixtfsi.o *floatsitf.o *extenddftf2.o
        *trunctfdf2.o *_clzsi2.o *cp-demangle.o *unwind*.o) *(.text)
G
greedyhao 已提交
77
        *finsh*shell.o (.text*)
G
greedyhao 已提交
78 79 80 81 82 83 84
        *(.text.unlikely)
        *(.text.startup)
        EXCLUDE_FILE (*components*libc**.o *romfs.o *lib_a**.o *cp-demangle.o
        *divdf3.o *muldf3.o *multf3.o *unwind*.o *_clz.o) *(.rodata)
        *(.rodata.name)
        EXCLUDE_FILE(*lib_a**.o *cp-demangle.o) *(.rodata.str1.4)
        EXCLUDE_FILE(*lib_a**.o *unwind*.o) *(.srodata)
G
greedyhao 已提交
85 86 87
        *(.rela*)
        *(.data*)
	    *(.sdata*)
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
    } > comm AT > flash

    .bss (NOLOAD):
    {
        __bss_start = .;
        *(COMMON)
        *(.bss)
        *(.sbss)
        *(.buf*)
        __bss_end = .;
    } > data
    __bss_size = __bss_end - __bss_start;

    .stack (NOLOAD) : {
        __irq_stack_start = .;
G
greedyhao 已提交
103
        . = __stack_ram_size;
104 105 106 107
        __irq_stack = .;
    } > stack
    __irq_stack_size = __irq_stack - __irq_stack_start;

G
greedyhao 已提交
108
    .heap (NOLOAD) : {
G
greedyhao 已提交
109 110 111 112
        __heap_start = .;
        . = __heap_ram_size;
        __heap_end = .;
    } > heap
G
greedyhao 已提交
113 114 115 116

    .flash : {
        *(.text*)
        *(.rodata*)
G
greedyhao 已提交
117
        *(.srodata*)
G
greedyhao 已提交
118 119
        . = ALIGN(512);
    } > flash
120 121 122 123 124
}

/* Calc the lma */
__bank_size = SIZEOF(.flash);
__comm_lma = LOADADDR(.comm);
G
greedyhao 已提交
125 126 127
__comm_size = SIZEOF(.comm);
__ram1_lma = LOADADDR(.ram1);
__ram1_size = SIZEOF(.ram1) + SIZEOF(.rti);