Joh*_*han 48 gcc arm cortex-m3 elf eabi
当你构建一个gcc工具链时,有可能将它构建为arm-elf或arm-none-eabi,但有什么区别?
我今天使用的是eabi,但这只是因为其他人似乎都这样做了......但是因为这是一个非常糟糕的论点,所以理解它们的区别真的很好.
注意:此工具链将交叉编译基于Cortex-M3的mcu代码:如stm32.
谢谢
一些链接:
EABI:
ELF:
pau*_*aul 38
每个架构或架构/ os夫妇都有一个ABI.ABI(应用程序二进制接口)描述了如何调用函数,系统调用数,传递的参数,可以使用哪些寄存器......
abi描述了编译器应如何生成汇编程序.
如果您只使用汇编程序,则无需关心ABI.
arm-elf和arm-none-eabi只使用两种版本的Arm ABI.eabi工具链使用了较新的版本,但也可以称为arm-elf-eabi,因为它也会产生精灵.
zhi*_*ang 35
这是一个很好的解释.
工具链遵循松散的命名约定: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
Run Code Online (Sandbox Code Playgroud)
一些例子:
arm-none-eabi:此工具链以ARM架构为目标,没有供应商,不针对任何操作系统,并且符合ARM EABI.
arm-none-linux-gnueabi:这个工具链以ARM架构为目标,没有供应商,创建在Linux操作系统上运行的二进制文件,并使用GNU EABI.它用于定位基于ARM的Linux系统.
小智 34
我所知:
arm-elf工具链为某些支持执行elf格式的操作系统生成obj代码(例如linux ABI).操作系统将控制程序的执行.
arm-none-eabi工具链为微控制器或微处理器生成obj代码(对于裸机,这将是EABI - 嵌入式ABI).此代码下载到MC的清洁闪存中,MC的核心在上电后开始执行.没有操作系统,扩展命令集,无法与共享模块链接.