生成了巨大的输出二进制文件

时间:2014-04-02 13:08:25

标签: linker arm cross-compiling ld linker-scripts

我正在开发用于飞思卡尔iMX6板的小型hello world应用程序,它将从片上RAM运行。我能够从OCRAM运行完整的代码,但是如果我修改链接器脚本以在外部DDR ram的内存空间中生成数据部分,则输出二进制文件的大小会突然从114 KB增加到259 MB。如果在OCRAM中创建该部分,它可以正常工作。它肯定与链接有关,但我找不到原因以及如何避免它。以下是链接描述文件中的选定部分:

`MEMORY
{
    OCRAM (rwx) : ORIGIN = 0x00900000, LENGTH = 256K
    DDR (rwx)   : ORIGIN = 0x10000000, LENGTH = 2048M
}`




    .ex_ram (ORIGIN(DDR)) : { . = . + 0x10; } > DDR

看起来像OCRAM和DDR ram地址空间之间的巨大差距给我的东西,但不能纠正它!

1 个答案:

答案 0 :(得分:2)

当然它确实如此,你要求它将文件转换为二进制文件吗?因此,即使数据段中只有一个字节的数据,您需要在.bin文件中拥有(0x10000000-0x00900000)+(数据量)字节...原始二进制文件格式没有任何地址信息因此,它需要覆盖所有可加载的段和填充之间的填充,因此您获得文件的大小(0x10000000-0x00900000)+(数据量)。做一个实验并将您的0x10000000更改为0x20000000,您将看到一个超过两倍大小的文件。

如果您使用elf或coff或intel hex或srec或某些包含地址和数据的二进制格式,并且不需要在文件中的段之间填充,那么您的文件将保持小...