link.lds 3.2 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. __fsymtab_start = .;
  36. KEEP(*(FSymTab))
  37. __fsymtab_end = .;
  38. . = ALIGN(4);
  39. __vsymtab_start = .;
  40. KEEP(*(VSymTab))
  41. __vsymtab_end = .;
  42. . = ALIGN(4);
  43. PROVIDE(__ctors_start__ = .);
  44. KEEP (*(SORT(.init_array.*)))
  45. KEEP (*(.init_array))
  46. PROVIDE(__ctors_end__ = .);
  47. . = ALIGN(4);
  48. *components*drivers**.o (.text*)
  49. *components.o (.text*)
  50. *idle.o (.text*)
  51. *object.o (.text*)
  52. *scheduler.o (.text*)
  53. } > ram1 AT > flash
  54. .comm __comm_vma : {
  55. . = ALIGN(4);
  56. KEEP(*(.vector))
  57. EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *dfs*filesystems**.o
  58. *romfs.o *lib_a**.o *divdi3.o *moddi3.o *divdf3.o *muldf3.o *eqtf2.o *getf2.o
  59. *letf2.o *multf3.o *subtf3.o *fixtfsi.o *floatsitf.o *extenddftf2.o
  60. *trunctfdf2.o *_clzsi2.o *cp-demangle.o *unwind*.o) *(.text)
  61. *finsh*shell.o (.text*)
  62. *(.text.unlikely)
  63. *(.text.startup)
  64. EXCLUDE_FILE (*components*libc**.o *dfs*filesystems**.o *romfs.o *lib_a**.o
  65. *cp-demangle.o *divdf3.o *muldf3.o *multf3.o *unwind*.o *_clz.o) *(.rodata)
  66. *(.rodata.name)
  67. EXCLUDE_FILE(*lib_a**.o *cp-demangle.o *cp-demangle.o) *(.rodata.str1.4)
  68. EXCLUDE_FILE(*lib_a**.o *unwind*.o) *(.srodata)
  69. *(.rela*)
  70. *(.data*)
  71. *(.sdata*)
  72. } > comm AT > flash
  73. .bss (NOLOAD):
  74. {
  75. __bss_start = .;
  76. *(COMMON)
  77. *(.bss)
  78. *(.sbss)
  79. *(.buf*)
  80. __bss_end = .;
  81. } > data
  82. __bss_size = __bss_end - __bss_start;
  83. .stack (NOLOAD) : {
  84. __irq_stack_start = .;
  85. . = __stack_ram_size;
  86. __irq_stack = .;
  87. } > stack
  88. __irq_stack_size = __irq_stack - __irq_stack_start;
  89. .heap (NOLOAD) : {
  90. __heap_start = .;
  91. . = __heap_ram_size;
  92. __heap_end = .;
  93. } > heap
  94. .flash : {
  95. *(.text*)
  96. *(.rodata*)
  97. *(.srodata*)
  98. . = ALIGN(512);
  99. } > flash
  100. }
  101. /* Calc the lma */
  102. __bank_size = SIZEOF(.flash);
  103. __comm_lma = LOADADDR(.comm);
  104. __comm_size = SIZEOF(.comm);
  105. __ram1_lma = LOADADDR(.ram1);
  106. __ram1_size = SIZEOF(.ram1);