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

jqjz2hbq  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(229)

当你构建一个gcc工具链的时候,你可以把它构建成arm-elf或者arm-none-eabi,但是有什么区别呢?
我今天使用eabi,但那只是因为其他人似乎都这样做...但既然这是一个非常糟糕的论点,如果能理解其中的区别就太好了。
注:此工具链将交叉编译基于Cortex-M3的MCU(如stm32)的代码。
谢谢

部分链接

EABI:

我的天

41zrol4v

41zrol4v1#

这是一个优秀的医生。
工具链具有松散的命名约定,如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系统。

polkgigr

polkgigr2#

每个体系结构或体系结构/操作系统对都有一个ABI。ABI(应用程序二进制接口)描述了如何调用函数、系统调用编号、传递的参数、可以使用的寄存器...
abi描述了编译器应该如何生成程序集。
如果你只使用汇编程序,你不需要关心ABI。
arm-elf和arm-none-eabi仅使用两个版本的Arm ABI。eabi工具链使用较新的修订版本,但也可称为arm-elf-eabi,因为它也生成elf。

qvk1mo1f

qvk1mo1f3#

正如我所知:

arm-elf工具链为支持执行elf格式的某些操作系统(例如linux ABI)生成对象代码。操作系统将控制程序的执行。
arm-none-eabi工具链为微控制器或微处理器生成目标代码(对于裸机,这将是EABI -嵌入式ABI)。该代码被下载到MC的干净闪存中,通电后MC的内核开始执行该代码。无操作系统、扩展命令集,无法与共享模块链接。

6ojccjat

6ojccjat4#

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

相关问题