link.lds 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /* Define the flash max size */
  2. __max_flash_size = 1024k;
  3. __data_ram_size = 8k;
  4. __stack_ram_size = 4k;
  5. __comm_ram_size = 83k;
  6. __heap_ram_size = 29k;
  7. __base = 0x10000000;
  8. __data_vma = 0x11000;
  9. __stack_vma = __data_vma + __data_ram_size;
  10. __comm_vma = __stack_vma + __stack_ram_size;
  11. __heap_vma = __comm_vma + __comm_ram_size;
  12. __ram1_vma = 0x50000;
  13. MEMORY
  14. {
  15. init : org = __base, len = 512
  16. flash(rx) : org = __base + 512, len = __max_flash_size
  17. comm(rx) : org = __comm_vma, len = __comm_ram_size
  18. data : org = __data_vma, len = __data_ram_size
  19. stack : org = __stack_vma, len = __stack_ram_size
  20. heap : org = __heap_vma, len = __heap_ram_size
  21. ram1(rx) : org = __ram1_vma, len = 0x7a00
  22. }
  23. SECTIONS
  24. {
  25. .init : {
  26. *(.reset)
  27. } > init
  28. .ram1 __ram1_vma : {
  29. . = ALIGN(4);
  30. /* section information for initial */
  31. __rt_init_start = .;
  32. KEEP(*(SORT(.rti_fn*)))
  33. __rt_init_end = .;
  34. . = ALIGN(4);
  35. PROVIDE(__ctors_start__ = .);
  36. KEEP (*(SORT(.init_array.*)))
  37. KEEP (*(.init_array))
  38. PROVIDE(__ctors_end__ = .);
  39. . = ALIGN(4);
  40. *components*drivers**.o (.text*)
  41. *components.o (.text*)
  42. } > ram1 AT > flash
  43. .comm __comm_vma : {
  44. . = ALIGN(4);
  45. KEEP(*(.vector))
  46. EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *dfs*filesystems**.o
  47. *romfs.o *lib_a**.o *divdi3.o *moddi3.o *divdf3.o *muldf3.o *eqtf2.o *getf2.o
  48. *letf2.o *multf3.o *subtf3.o *fixtfsi.o *floatsitf.o *extenddftf2.o
  49. *trunctfdf2.o *_clzsi2.o *cp-demangle.o *unwind*.o
  50. *fixdfsi.o *addsf3.o *divsf3.o *eqsf2.o *gesf2.o *float*.o
  51. *lesf2.o *mulsf3.o *subsf3.o *fixsfsi.o *fixunssfsi.o) *(.text)
  52. *finsh*shell.o (.text*)
  53. *(.text.unlikely)
  54. *(.text.startup)
  55. EXCLUDE_FILE (*components*libc**.o *dfs*filesystems**.o *romfs.o *lib_a**.o
  56. *cp-demangle.o *divdf3.o *muldf3.o *multf3.o *unwind*.o *_clz.o) *(.rodata)
  57. *(.rodata.name)
  58. EXCLUDE_FILE(*lib_a**.o *cp-demangle.o *cp-demangle.o) *(.rodata.str1.4)
  59. EXCLUDE_FILE(*lib_a**.o *unwind*.o) *(.srodata)
  60. *(.rela*)
  61. *(.data*)
  62. *(.sdata*)
  63. } > comm AT > flash
  64. .bss (NOLOAD):
  65. {
  66. __bss_start = .;
  67. *(COMMON)
  68. *(.bss)
  69. *(.sbss)
  70. *(.buf*)
  71. __bss_end = .;
  72. } > data
  73. __bss_size = __bss_end - __bss_start;
  74. .stack (NOLOAD) : {
  75. __irq_stack_start = .;
  76. . = __stack_ram_size;
  77. __irq_stack = .;
  78. } > stack
  79. __irq_stack_size = __irq_stack - __irq_stack_start;
  80. .heap (NOLOAD) : {
  81. __heap_start = .;
  82. . = __heap_ram_size;
  83. __heap_end = .;
  84. } > heap
  85. .flash : {
  86. . = ALIGN(4);
  87. __fsymtab_start = .;
  88. KEEP(*(FSymTab))
  89. __fsymtab_end = .;
  90. . = ALIGN(4);
  91. __vsymtab_start = .;
  92. KEEP(*(VSymTab))
  93. __vsymtab_end = .;
  94. *(.text*)
  95. *(.rodata*)
  96. *(.srodata*)
  97. . = ALIGN(512);
  98. } > flash
  99. }
  100. /* Calc the lma */
  101. __bank_size = SIZEOF(.flash);
  102. __comm_lma = LOADADDR(.comm);
  103. __comm_size = SIZEOF(.comm);
  104. __ram1_lma = LOADADDR(.ram1);
  105. __ram1_size = SIZEOF(.ram1);