Linux elf文件认为它很小,但它很大!无法生成.bin和.hex文件
我正在将一个项目从Kail迁移到Gcc 生成文件 .ld文件 我有一个Makefile和一个platform.ld脚本以及一些.c和.h文件。 当我制作的时候,所有的东西都被编译和链接,看起来很好 arm none eabi尺寸-B输出/stm32_gps_test.elfLinux elf文件认为它很小,但它很大!无法生成.bin和.hex文件,linux,gcc,makefile,arm,Linux,Gcc,Makefile,Arm,我正在将一个项目从Kail迁移到Gcc 生成文件 .ld文件 我有一个Makefile和一个platform.ld脚本以及一些.c和.h文件。 当我制作的时候,所有的东西都被编译和链接,看起来很好 arm none eabi尺寸-B输出/stm32_gps_test.elf text data bss dec hex filename 0 0 2048 2048 800 Output/stm32_gps_test.elf ELF
text data bss dec hex filename
0 0 2048 2048 800 Output/stm32_gps_test.elf
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x8000000
Start of program headers: 52 (bytes into file)
Start of section headers: 7323752 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 1
Size of section headers: 40 (bytes)
Number of section headers: 18
Section header string table index: 15
但当我检查生成的文件时,我看到:
ls输出/
7327274 2011-07-02 04:28 stm32_gps_test.elf
0 2011-07-02 04:28 stm32_gps_test.bin
34 2011-07-02 04:28 stm32_gps_test.hex
以及:
尾部输出/stm32\u gps\u test.hex
:0400000508000000EF
:00000001FF
有关elf文件的一些信息:
arm none eabi readelf-h输出/stm32_gps_test.elf
text data bss dec hex filename
0 0 2048 2048 800 Output/stm32_gps_test.elf
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x8000000
Start of program headers: 52 (bytes into file)
Start of section headers: 7323752 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 1
Size of section headers: 40 (bytes)
Number of section headers: 18
Section header string table index: 15
怎么了?我试着运行objcopy来创建一个binfile和hexfile,但是结果总是一样的。当你反汇编它时,你看到了什么?(objdump-D)例如,如果您有一个0x80000000的rom映像和0x20000000的ram,则objcopy中的.bin文件将至少为0x60000000字节加上rom中映像的大小。不过,intel十六进制文件或srec应该可以工作。当您分解它时,您会看到什么?(objdump-D)例如,如果您有一个0x8000000的rom映像和0x20000000的ram,则objcopy中的.bin文件将至少为0x60000000字节加上rom中映像的大小。intel十六进制文件或srec应该可以工作。选项
--设置节标志。bss=alloc,load,contents
是否有效?使用此选项,.bss节将包含在stm32\u gps\u test.bin中。选项--设置节标志。bss=alloc,load,contents
是否有效?使用此选项,.bss部分将包含在stm32\u gps\u test.bin中。链接过程中是否出现错误?您在ld脚本中将闪存大小设置为20kB,这在许多情况下都太小。以前它被设置为更大,尝试减小它以查看是否有任何效果,获得512k的rom和64k的ram。编译器和链接器完全没有错误。请尝试在Makefile
中将REMOVE\u UNUSED
设置为0
。看起来ld优化了你所有的代码。Doh,facepalm得到了很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400:…当我将REMOVE_不用于1时,我遇到了一些链接错误,在解决这些错误后,我得到了一个正确的文件。它编译并给出正确的输出!但在我的设备上不工作,但这不是问题所在!是否要编写一个awnser,以便我将其标记为已解决?链接过程中是否出现错误?您在ld脚本中将闪存大小设置为20kB,这在许多情况下都太小。以前它被设置为更大,尝试减小它以查看是否有任何效果,获得512k的rom和64k的ram。编译器和链接器完全没有错误。请尝试在Makefile
中将REMOVE\u UNUSED
设置为0
。看起来ld优化了你所有的代码。Doh,facepalm得到了很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400:…当我将REMOVE_不用于1时,我遇到了一些链接错误,在解决这些错误后,我得到了一个正确的文件。它编译并给出正确的输出!但在我的设备上不工作,但这不是问题所在!是否要编写一个awnser,以便将其标记为已解决?objdump-D stm32_gps_test.elfstm32_gps_test.elf:文件格式elf32 little objdump:无法反汇编,架构未知
请使用能够读取arm二进制文件的arm none eabi objdump
。Doh,facepalm有很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400:…objdump-D stm32_gps_test.elfstm32_gps_test.elf:文件格式elf32小objdump:无法反汇编,因为架构未知
请使用能够读取arm二进制文件的arm none eabi objdump
。Doh,facepalm有很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400 : ...