我有一个嵌入式系统的链接描述文件,它进行了一些重定位(代码加载到设备的闪存中,但在启动时复制到RAM中以便执行)。它使用AT feature of the linker,这似乎是为了做到这一点。
问题是重定位部分的大小目前只收取ram
内存区域的费用,实际上应该向rom
和ram
区域收取费用(它在设备处于静止状态时占据前者,而在设备处于活动状态时占据前者。目前,如果data
单独适用rom
但data + relocation
超过rom
,则您不会收到任何错误或警告。
如何让.relocate
部分向 {/ 1}}和rom
内存区域收取其大小费用?
最小化的链接描述文件:
ram
答案 0 :(得分:1)
我们设法解决了这个问题。解决方案是更改指定relocate
部分的位置的方式,具体而言,这是错误的:
# Bad:
.relocate : AT (_etext)
{
...
} > ram
相反,AT
指令应该在最后,如下所示:
# Correct
.relocate :
{
...
} > ram AT > rom
这将导致链接器将.relocate
的大小充电到ram
和rom
,同时放置"物理"在rom
。
(Final applied patch到问题中链接的完整链接描述文件)