打印

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

[复制链接]
1368|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
numen_he|  楼主 | 2013-3-14 08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
delin17| | 2013-3-14 12:35 | 只看该作者
改ld文件吧
网上百度一下ld文件怎么改。

使用特权

评论回复
板凳
reille| | 2013-3-14 13:55 | 只看该作者
可执行文件都是链接器生成的,它总是使用链接器脚本,描述了如何把输入文件即各种对象文件中的section映射到生成文件中,并控制输出文件的存储布局。如果链接器没有指定链接器脚本,则使用默认的链接器脚本。看一段ecos中链接器输出脚本:
MEMORY
{
    sram  : ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
    flash : ORIGIN = 0x08000000, LENGTH = 0x00080000
    rom   : ORIGIN = 0x64000000, LENGTH = 0x01000000
    ram   : ORIGIN = 0x68000000, LENGTH = 0x00100000
}

SECTIONS
{
    SECTIONS_BEGIN
    SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA)
    SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA)
    SECTION_sram (sram, 0x20000400, FOLLOWING (.got))
    SECTION_data (ram, 0x68000000, FOLLOWING (.sram))
    SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}
上述的脚本中定义了生成文件中各个section的地址空间。
需要注意的是,链接器脚本中的section名称与目标架构有关。更多的知识还是搜索下吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

1

粉丝