当你构建一个gcc工具链的时候,你可以把它构建成arm-elf或者arm-none-eabi,但是有什么区别呢?
我今天使用eabi,但那只是因为其他人似乎都这样做...但既然这是一个非常糟糕的论点,如果能理解其中的区别就太好了。
注:此工具链将交叉编译基于Cortex-M3的MCU(如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
我的天
4条答案
按热度按时间41zrol4v1#
这是一个优秀的医生。
工具链具有松散的命名约定,如arch [-vendor] [-os] - eabi
一些例证如下:
*arm-none-eabi-此工具链面向ARM架构,没有供应商,不面向操作系统,并且符合ARM EABI。
*arm-none-linux-gnueabi-此工具链面向ARM架构,没有供应商,创建在Linux操作系统上运行的二进制文件,并使用GNU EABI。它用于面向基于ARM的Linux系统。
polkgigr2#
每个体系结构或体系结构/操作系统对都有一个ABI。ABI(应用程序二进制接口)描述了如何调用函数、系统调用编号、传递的参数、可以使用的寄存器...
abi描述了编译器应该如何生成程序集。
如果你只使用汇编程序,你不需要关心ABI。
arm-elf和arm-none-eabi仅使用两个版本的Arm ABI。eabi工具链使用较新的修订版本,但也可称为arm-elf-eabi,因为它也生成elf。
qvk1mo1f3#
正如我所知:
arm-elf工具链为支持执行elf格式的某些操作系统(例如linux ABI)生成对象代码。操作系统将控制程序的执行。
arm-none-eabi工具链为微控制器或微处理器生成目标代码(对于裸机,这将是EABI -嵌入式ABI)。该代码被下载到MC的干净闪存中,通电后MC的内核开始执行该代码。无操作系统、扩展命令集,无法与共享模块链接。
6ojccjat4#
ARM EABI是ARM创建的一个标准,允许不同的工具链创建兼容的对象。例如,这样一个工具链可以链接另一个工具链创建的对象。