我们有一个带有自定义部分的链接器脚本,出于某些 IEC 合规性测试原因而添加了该部分。然而,自从添加这个部分之后,通过创建的二进制大小objcopy -O binary input output
已经从 ~150kbytes 激增到 ~512Mbytes。
我已将其追溯到缺少该(NOLOAD)
属性的部分。而且我也可以解释为什么二进制文件是 512Mbytes。
我们的记忆如下:
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00007580
CUSTOM_SECTION (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000
}
最初定义的部分是:
CUSTOM_LOCATION:
{
CUSTOM_BEGIN = .;
KEEP(*(CUSTOM_LOCATION));
CUSTOM_END = .;
} > CUSTOM_SECTION AT > ram
如果CUSTOM_LOCATION:
替换CUSTOM_LOCATION (NOLOAD):
为生成的二进制文件是正常的。没有(NOLOAD)
二进制大小是~512Mbytes。
我正在寻找这个二进制文件变得如此之大的原因。生成二进制文件(NOLOAD)
(或不存在)意味着什么?objcopy
第二个问题,在本节的最后我们说} > CUSTOM_SECTION AT > ram
我们可以不用这个指令吗?可以直接替换} > ram
吗?(这可以CUSTOM_SECTION
从MEMORY
零件中删除吗?
我在生成的map
文件中没有看到任何差异