【发布时间】:2015-05-02 18:43:25
【问题描述】:
我正在尝试了解第三方链接器脚本。
在脚本的开头,它定义了两个内存(使用 MEMORY {...}),称为 iram 和 dram。
然后定义了一些具有以下语法的部分:
.data{
...
} > dram AT > iram
我知道最后的 > dram 意味着将该部分(在本例中为 .data)定位在 dram 区域中。但是我不明白“AT > iram”是什么意思。
【问题讨论】:
标签: linker
我正在尝试了解第三方链接器脚本。
在脚本的开头,它定义了两个内存(使用 MEMORY {...}),称为 iram 和 dram。
然后定义了一些具有以下语法的部分:
.data{
...
} > dram AT > iram
我知道最后的 > dram 意味着将该部分(在本例中为 .data)定位在 dram 区域中。但是我不明白“AT > iram”是什么意思。
【问题讨论】:
标签: linker
您的示例中 .data 定义的 dram 部分指定了 .data 部分的虚拟内存地址 (VMA),而 iram 部分指定了加载内存地址 (LMA)。
VMA 是程序运行时节的地址。地址 LMA 是程序加载时节的地址。例如,这可用于为非易失性内存中的全局变量提供初始值,这些变量在程序加载期间被复制到 RAM。
更多信息也可以在 GNU 链接器 ld 的手册中找到:https://sourceware.org/binutils/docs/ld/Output-Section-Attributes.html#Output-Section-Attributes
【讨论】: