请教高手:如何将代码放在不同的地址空间

[复制链接]
 楼主| numen_he 发表于 2013-3-14 08:51 | 显示全部楼层 |阅读模式
我想把编译出来的代码和变量分几块存放到不同的地址空间,请教高手在如何改makefile和ld文件脚本或者用其它办法,谢谢。
delin17 发表于 2013-3-14 12:35 | 显示全部楼层
改ld文件吧
网上百度一下ld文件怎么改。
reille 发表于 2013-3-14 13:55 | 显示全部楼层
可执行文件都是链接器生成的,它总是使用链接器脚本,描述了如何把输入文件即各种对象文件中的section映射到生成文件中,并控制输出文件的存储布局。如果链接器没有指定链接器脚本,则使用默认的链接器脚本。看一段ecos中链接器输出脚本:
  1. MEMORY
  2. {
  3.     sram  : ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
  4.     flash : ORIGIN = 0x08000000, LENGTH = 0x00080000
  5.     rom   : ORIGIN = 0x64000000, LENGTH = 0x01000000
  6.     ram   : ORIGIN = 0x68000000, LENGTH = 0x00100000
  7. }

  8. SECTIONS
  9. {
  10.     SECTIONS_BEGIN
  11.     SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA)
  12.     SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA)
  13.     SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA)
  14.     SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA)
  15.     SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA)
  16.     SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA)
  17.     SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA)
  18.     SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA)
  19.     SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA)
  20.     SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA)
  21.     SECTION_sram (sram, 0x20000400, FOLLOWING (.got))
  22.     SECTION_data (ram, 0x68000000, FOLLOWING (.sram))
  23.     SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA)
  24.     CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
  25.     SECTIONS_END
  26. }
上述的脚本中定义了生成文件中各个section的地址空间。
需要注意的是,链接器脚本中的section名称与目标架构有关。更多的知识还是搜索下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部