arm gcc 工具链作为 arm-elf 或 arm-none-eabi,有啥区别?

Posted

技术标签:

【中文标题】arm gcc 工具链作为 arm-elf 或 arm-none-eabi,有啥区别?【英文标题】:arm gcc toolchain as arm-elf or arm-none-eabi, what is the difference?arm gcc 工具链作为 arm-elf 或 arm-none-eabi,有什么区别? 【发布时间】:2011-08-23 03:11:23 【问题描述】:

当您构建 gcc 工具链时,可以将其构建为 arm-elf 或 arm-none-eabi,但有什么区别?

我今天使用 eabi,但这只是因为其他人似乎都这样做......但由于这是一个非常糟糕的论点,所以理解其中的区别会非常好。

注意:此工具链将为基于 Cortex-M3 的 mcu:s 交叉编译代码,例如 stm32。

谢谢


一些链接

EABI:

http://en.wikipedia.org/wiki/Application_binary_interface http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html

精灵:

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

【问题讨论】:

对于不太深入的嵌入式使用,请查看debian。 ***.com/a/13798214/1163019 【参考方案1】:

Here 是一个很好的解释。

工具链遵循宽松的命名约定:arch [-vendor] [-os] -eabi

  arch    refers to target architecture (which in our case is ARM)
  vendor  refers to toolchain supplier
  os      refers to the target operating system
  eabi    refers to Embedded Application Binary Interface

一些例子:

arm-none-eabi:此工具链针对 ARM 架构,无厂商,不针对任何操作系统,符合 ARM EABI。

arm-none-linux-gnueabi:此工具链针对 ARM 架构,没有供应商,创建在 Linux 操作系统上运行的二进制文件,并使用 GNU EABI。它用于针对基于 ARM 的 Linux 系统。

【讨论】:

【参考方案2】:

每个架构或架构/操作系统组合都有一个 ABI。 ABI(应用程序二进制接口)描述了应该如何调用函数、系统调用编号、传递的参数、可以使用哪些寄存器......

abi 描述了编译器应该如何生成程序集。

如果您只使用汇编程序,则无需关心 ABI。

arm-elf 和 arm-none-eabi 只使用了两个版本的 Arm ABI。 eabi 工具链使用较新的版本,但也可以称为 arm-elf-eabi,因为它也会生成 elf。

【讨论】:

【参考方案3】:

据我所知:

arm-elf 工具链为某些支持执行 elf 格式的操作系统(例如 linux ABI)生成 obj 代码。操作系统将控制您的程序的执行。

arm-none-eabi 工具链为微控制器或微处理器生成 obj 代码(对于裸机,这将是 EABI - 嵌入式 ABI)。下载此代码用于清理 MC 的 flash 和 MC 的核心在上电后开始执行它。没有操作系统,扩展命令集,没有与共享模块链接的可能性。

【讨论】:

【参考方案4】:

ARM EABI 是 ARM 创建的标准,允许不同的工具链创建兼容的对象。例如,一个工具链可以链接另一个工具链创建的对象。

【讨论】:

以上是关于arm gcc 工具链作为 arm-elf 或 arm-none-eabi,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

arm-linux-gcc工具链:汇编文件如何include c的头文件呢???

arm-elf和arm-eabi的区别

Linux下获取arm的交叉编译工具链

GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有啥区别?

ARM交叉编译工具链

Ubuntu 编译 ARM-Linux-Gcc 工具链 -- 编译过程