我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

我分不清 arm-xxx-gcc 和 arm-linux--gcc、arm-none-linux--gcc 之间的区别

作为一个嵌入式工程师肯定会用到交叉编译器arm-xxx-gcc,但是各种各样的arm-xxx-gcc让人眼花缭乱,于是上网搜了搜,居然还找到一位高手讲解了他们的区别。

阐明:

arm-xxx-gcc还分为是否支持操作系统

支持的操作系统:arm-none-linux-eabi-gcc

不支持的操作系统:arm-none-eabi-gcc

1. ABI 和 EABI

ABI:ARM 的应用程序二进制接口 (ABI)。在计算机中,应用程序二进制接口描述应用程序(或其他类型)与操作系统或其他应用程序之间的低级接口。

EABI:嵌入式 ABI。嵌入式应用程序二进制接口指定了嵌入式软件中的文件格式、数据类型、寄存器使用、堆栈组织优化和参数的标准约定。使用自己的汇编语言的开发人员也可以使用 EABI 作为兼容编译器生成的汇编语言的接口。

两者主要区别在于ABI是在计算机上,而EABI是在嵌入式平台上(例如ARM,MIPS等)。

2. arm-none-eabi-gcc

(ARM EABI)用于编译 ARM 架构的裸机系统(包括 ARM Linux 启动,不适合编译 Linux 应用程序)。它一般适用于 ARM7、-M 和 -R 内核的芯片,因此不支持与操作系统密切相关的功能。

3. arm-none-linux--gcc

(ARM,不是,就是运行在Linux上的,使用GNU EABI)主要用于基于ARM架构的Linux系统。可以用来编译ARM架构的u-boot,Linux ,Linux应用程序等。arm-none-linux-基于GCC,使用Glibc库,是该公司经过优化后推出的编译器。arm-none-linux--xxx交叉编译工具,具有优秀的浮点运算能力。一般ARM9,ARM11,-A内核的Linux操作系统都会用到它。

4. arm-linux--gcc 和 arm-linux--gcc

两个交叉编译器分别适用于armel和armhf两种不同的架构,armel和armhf对于浮点运算采用了不同的策略(只有带有fpu的arm才支持这两种浮点运算策略)。

两个交叉编译器对于gcc选项--abi的默认值有所不同,gcc选项--abi有soft、hard、hard三个值(后两者要求arm有fpu浮点单元,soft兼容后两者,但不兼容hard模式):

Soft:不使用FPU进行浮点计算,即使有FPU浮点单元,而是使用软件模式。

:armel架构(对应编译器为arm-linux--gcc)使用的默认值是使用fpu进行计算,但是使用普通寄存器传递参数。这样当发生中断时,只需要保存普通寄存器,中断负荷小,但是需要将参数转为浮点数后再进行计算。

hard:armhf架构(对应编译器arm-linux--gcc)使用的默认值,使用fpu进行计算,使用fpu中的浮点寄存器进行参数传递,无需转换,性能最好,但中断负载较大。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/4728.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线