arm gcc toolchain作为arm-elf还是arm-none-eabi,有什么区别?

当你build立一个海湾合作委员会的工具链,有可能把它build立为武装精灵或无武器,但有什么区别?

我今天使用了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

ELF:

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

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

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

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

胳膊小精灵和胳膊非埃比只使用Arm ABI的两个版本。 eabi工具链使用了一个更新的版本,但也可以称为arm-elf-eabi,因为它也会生成精灵。

我所知:

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

arm-none-eabi工具链为微控制器或微处理器生成obj代码(对于裸机,这将是EABIembedded的ABI)。 该代码被下载到MC的清除闪存,MC的核心开始执行后开始执行。 没有操作系统,扩展的命令集,没有与共享模块链接的可能性。

这是一个很好的文档: https : //community.freescale.com/thread/313490

工具链有一个松散的名称约定像拱门[-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架构,没有供应商,创build在Linux操作系统上运行的二进制文件,并使用GNU EABI。 它用于定位基于ARM的Linux系统。

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

Interesting Posts