57

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

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

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

谢谢


一些链接

EABI:

精灵:

4

4 回答 4

42

是一个很好的解释。

工具链遵循松散的命名约定: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 系统。

于 2015-04-17T16:30:19.767 回答
40

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

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

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

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

于 2011-05-15T07:46:36.527 回答
37

我所知:

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

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

于 2013-06-13T12:24:23.383 回答
4

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

于 2012-03-12T16:51:54.527 回答