arm gcc toolchain as arm-elf or arm-none-eabi,有什么区别?

时间:2011-05-11 09:01:06

标签: gcc arm elf cortex-m3 eabi

当你构建一个gcc工具链时,有可能将它构建为arm-elf或arm-none-eabi,但有什么区别?

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

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

由于


部分链接

EABI:

ELF:

4 个答案:

答案 0 :(得分:34)

每个架构或架构/ os夫妇都有一个ABI。 ABI(应用程序二进制接口)描述了如何调用函数,系统调用数,传递的参数,可以使用哪些寄存器......

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

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

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

答案 1 :(得分:31)

据我所知:

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

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

答案 2 :(得分:30)

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系统。

答案 3 :(得分:4)

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