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

arm gcc工具链作为arm elf或arm none eabi,有什么区别?,gcc,arm,elf,cortex-m3,eabi,Gcc,Arm,Elf,Cortex M3,Eabi,当您构建gcc工具链时,有可能将其构建为arm elf或arm none eabi,但区别是什么 我今天使用eabi,但那只是因为其他人似乎都这么做。。。但是,既然这是一个非常糟糕的论点,那么理解其中的区别就非常好了 注意:此工具链将为基于Cortex-M3的mcu:s(如stm32)交叉编译代码 谢谢 某些链接: EABI: 极低频: 每个体系结构或体系结构/os耦合都有一个ABI。ABI(应用程序二进制接口)描述如何调用函数、系统调用数、传递的参数、可以使用哪些寄存器 abi描

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

我今天使用eabi,但那只是因为其他人似乎都这么做。。。但是,既然这是一个非常糟糕的论点,那么理解其中的区别就非常好了

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

谢谢


某些链接

EABI:

极低频:


每个体系结构或体系结构/os耦合都有一个ABI。ABI(应用程序二进制接口)描述如何调用函数、系统调用数、传递的参数、可以使用哪些寄存器

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

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


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

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

据我所知:

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

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

是一个很好的解释

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

对于嵌入式程度较低的应用,请参阅。