工具链有一个松散的名称约定,如 arch[-vendor][-os]-abi-
language .
-
arch
适用于架构,编译器用于哪个目标平台: arm , mips , x86 , i686 ... -
vendor
是工具链供应商,以厂家名称命名的,也有以开发板命名的,或者直接是none或cross的,或者留空: apple -
os
适用于操作系统: linux , none (裸机) -
abi
用于应用程序二进制接口约定: eabi , gnueabi , gnueabihf gnu等价于glibc+oabi;gnueabi等价于glibc+eabi。若不指定,则也可以留空不填 -
language:编译器用于编译何种语言,最常见的就是gcc,g++
arm-xxx-gcc 还分为是否支持操作系统
支持操作系统:arm-none-linux-eabi-gcc
不支持操作系统:arm-none-eabi-gcc
ABI 和 EABI
ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。
EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。
两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)
arm-none-eabi-gcc:用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片。
arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-linux-gnueabihf-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
简单来说,arm-linux-gcc 是 arm-none-linux-gnueabi-gcc 的一个软链接: