Linux elf文件认为它很小,但它很大!无法生成.bin和.hex文件

Linux 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

我正在将一个项目从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 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.elf
stm32_gps_test.elf:文件格式elf32 little objdump:无法反汇编,架构未知
请使用能够读取arm二进制文件的
arm none eabi objdump
。Doh,facepalm有很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400:…objdump-D stm32_gps_test.elf
stm32_gps_test.elf:文件格式elf32小objdump:无法反汇编,因为架构未知
请使用能够读取arm二进制文件的
arm none eabi objdump
。Doh,facepalm有很多(dump.txt=88Mb)。分段拆卸。烟囱:20000000:。。。20000400 : ...