链接器脚本:将一个部分标记为占用两个内存段中的空间

时间:2018-03-28 01:09:30

标签: linker ld

我有一个嵌入式系统的链接描述文件,它进行了一些重定位(代码加载到设备的闪存中,但在启动时复制到RAM中以便执行)。它使用AT feature of the linker,这似乎是为了做到这一点。

问题是重定位部分的大小目前只收取ram内存区域的费用,实际上应该向romram区域收取费用(它在设备处于静止状态时占据前者,而在设备处于活动状态时占据前者。目前,如果data单独适用romdata + relocation超过rom,则您不会收到任何错误或警告。

如何让.relocate部分向 {/ 1}}和rom内存区域收取其大小费用?

最小化的链接描述文件:

ram

或者这里是the complete linker script file

1 个答案:

答案 0 :(得分:1)

我们设法解决了这个问题。解决方案是更改指定relocate部分的位置的方式,具体而言,这是错误的:

# Bad:
.relocate : AT (_etext)
{
...
} > ram

相反,AT指令应该在最后,如下所示:

# Correct
.relocate :
{
...
} > ram AT > rom

这将导致链接器将.relocate的大小充电到ramrom,同时放置"物理"在rom

Final applied patch到问题中链接的完整链接描述文件)