arm-elf和arm-none-eabi工具链生成的可执行文件格式有什么不同吗?

时间:2016-02-17 09:40:21

标签: c gcc arm elf gnu-toolchain

我正在尝试建立一个裸机臂项目。我尝试了GNU工具链arm-elfarm-none-eabi。当转换为英特尔十六进制格式时,两个工具链生成的可执行文件运行正常。

我正在使用Proteus软件进行模拟。 Proteus支持以elf和coff格式调试可执行文件。

在我的情况下,Proteus接受arm-elf生成的可执行文件,但在加载arm-none-eabi生成的可执行文件时显示错误。 Proteus显示的错误消息是:

enter image description here

我刚刚在linux中运行file命令,并将两个可执行文件作为参数逐个运行。

结果如下所示。

arm-none-eabi输出

image:ELF 32位LSB可执行文件,ARM,EABI5版本1(SYSV),静态链接,未剥离

arm-elf输出

image:ELF 32位LSB可执行文件,ARM,版本1,静态链接,未剥离

有没有选择使用arm-none-eabi工具链生成Proteus兼容的elf文件?

编辑: 我的收费链详情'版本

C:\SysGCC\arm-elf\bin>arm-elf-gcc.exe --version
arm-elf-gcc.exe (GCC) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C:\SysGCC\arm-elf\bin>arm-elf-as.exe --version
GNU assembler (GNU Binutils) 2.22
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `arm-elf'.

sreeyesh@ITP-PTLX118:~$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (15:4.9.3+svn227297-1) 4.9.3 20150529 (prerelease)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

sreeyesh@ITP-PTLX118:~$ arm-none-eabi-as --version
GNU assembler (2.25-10ubuntu1+5build1) 2.25
Copyright (C) 2014 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `arm-none-eabi'.

提前致谢。

1 个答案:

答案 0 :(得分:4)

我终于找到了问题的解决方案。我注意到,在Proteus中,可以选择配置工具链并从Proteus本身构建源代码。

我刚做了以下事情

  1. 从支持的编译器列表中选择GNU ARM工具链
  2. 配置工具链路径以指向我的arm-none-eabi工具链。
  3. 创建了一个空主函数的新项目。
  4. 建立项目。
  5. 构建成功,更有趣的是我可以调试可执行文件。

    Proteus记录构建命令。当我分析日志时,我注意到Proteus在调用arm-none-eabi-gcc时使用了一些额外的选项。我尝试了这些额外的选项,最后发现选项-gdwarf-2起着关键作用。

    我使用此选项更新了我的makefile,它运行正常。

    此选项只启用DWARF版本2格式,这是我从网络搜索中理解的所有内容。但是为什么没有这个选项的arm-elf工具链仍然是个问题。可能是,默认情况下在arm-elf中启用此选项。

    无论如何,我对这个发现感到满意,因为我现在可以继续工作了。

    感谢所有那些不遗余力地帮助我的人。希望这一发现能够帮助人们使用GNU ARM工具链进行Proteus仿真试验。