【问题标题】:What does > region1 AT > region2 mean in an LD linker script?> region1 AT > region2 在 LD 链接描述文件中是什么意思?
【发布时间】:2015-05-02 18:43:25
【问题描述】:

我正在尝试了解第三方链接器脚本。

在脚本的开头,它定义了两个内存(使用 MEMORY {...}),称为 iram 和 dram。

然后定义了一些具有以下语法的部分:

.data{
...
} > dram AT > iram

我知道最后的 > dram 意味着将该部分(在本例中为 .data)定位在 dram 区域中。但是我不明白“AT > iram”是什么意思。

【问题讨论】:

    标签: linker


    【解决方案1】:

    您的示例中 .data 定义的 dram 部分指定了 .data 部分的虚拟内存地址 (VMA),而 iram 部分指定了加载内存地址 (LMA)。

    VMA 是程序运行时节的地址。地址 LMA 是程序加载时节的地址。例如,这可用于为非易失性内存中的全局变量提供初始值,这些变量在程序加载期间被复制到 RAM。

    更多信息也可以在 GNU 链接器 ld 的手册中找到:https://sourceware.org/binutils/docs/ld/Output-Section-Attributes.html#Output-Section-Attributes

    【讨论】:

    • 使用此链接描述文件的启动代码将 .data 部分从 ROM 复制到 RAM。所以,如果我理解正确,当你知道这会发生时,你需要 > ram AT > rom 参数?抱歉,我看不到这个链接。另一件事是“地址是加载程序时该部分的地址”中的句子您指的是LMA,对吗?
    • 是的,对不起,我的意图是写 LMA(我在上面编辑了我的答案)。另一个stackoverflow问题也解释了一个类似的例子:link.
    猜你喜欢
    • 2022-06-25
    • 2013-05-17
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多