我正在尝试了解第三方链接器脚本。
在脚本的开头,它定义了两个名为iram和dram的内存(使用MEMORY {...})。
然后定义了一些具有以下语法的部分:
.data{
...
} > dram AT > iram
我知道>末尾的dram意味着将该部分(在这种情况下为.data)定位在dram区域中。但是我不明白“AT> iram”是什么意思。
答案 0 :(得分:1)
示例中.data定义的dram部分指定.data部分的虚拟内存地址(VMA),而iram部分指定加载内存地址(LMA)。
VMA是程序运行时该部分的地址。地址 LMA是加载程序时该部分的地址。例如,这可用于为非易失性存储器中的全局变量提供初始值,这些变量在程序加载期间复制到RAM中。
更多信息也可以在GNU链接器的手册中找到:https://sourceware.org/binutils/docs/ld/Output-Section-Attributes.html#Output-Section-Attributes