开发的过程中,我们一般都不使用开发板自带的交叉编译器的,因为都是厂家有封装的,扩展性比较差,所以比较推荐使用免费版大厂的交叉编译器:第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。今天我要讲的主要是Linora的交叉编译器。
第一:认识i686和x86_64
见下面解释便知道32位和64位是代表的你的电脑位数,而非开发板的
i686
- i686 是指一种32位架构,属于Intel x86架构家族的一部分。
- 32位系统:i686 处理器可以运行32位操作系统和应用程序。
- 历史背景:i686 是 Intel 的 Pentium Pro 处理器的代号,后来也用来指代任何兼容 i686 指令集的 32 位处理器。
x86_64
- x86_64 是指一种64位架构,也称为 AMD64 或 Intel 64。
- 64位系统:x86_64 处理器可以运行64位操作系统和应用程序,也向后兼容运行32位操作系统和应用程序。
- 历史背景:x86_64 架构最早由 AMD 公司开发,并在 AMD 的 Athlon 64 处理器上首次应用。之后 Intel 也采用了这种架构,并命名为 Intel 64。
第二、认识两种arm架构的标签
图中命名规则:前半部分对象为主机+后半部分为开发板
arm-linux-gnueabihf 代表交叉编译器生成的是 arm-linux-gnueabihf 架构的二进制文件。
- arm:
- 指 32 位 ARM 架构。适用于 ARMv7 和以下版本的 32 位处理器。
aarch64:
指的 64 位 ARM 架构(ARMv8)
- linux:
- 表示目标平台是 Linux 操作系统。生成的二进制文件是为 Linux 运行环境准备的。
- gnueabi:
- gnueabi 表示 GNU Embedded Application Binary Interface,适用于嵌入式系统。
eabi
代表嵌入式应用二进制接口,这是 ARM 架构的标准 ABI,确保二进制兼容性。
- hf:(补充)
- hf 代表硬浮点(hard float)。这表示生成的二进制文件使用硬件浮点运算单元(FPU),这比软件浮点运算(soft float)有更好的性能。
根据上面的认识认识,找自己需要的,绝大部分都只需要用到上面4个专有名词来认识。小众的词汇,在这里就不提了!!!、、Linaro命名规则:
- 架构名称(如 aarch64, arm, armeb, armv8l):指定处理器架构和字节序。
- 目标平台(如 linux-gnu, elf, eabi):指定编译器生成的目标平台或格式。
- EABI 和 GNUEABI:Embedded ABI 是专为嵌入式系统设计的应用二进制接口,GNU EABI 则是带有 GNU 扩展的版本。
- HF(hard float):表示编译器支持硬浮点运算,这对性能有显著提升。
思考:
假设我现在需要用上述的交叉编译器,替换我开发板自带的aarch64-poky-linux,上面那个更好点:
- aarch64:表示 64 位 ARM 架构(ARMv8)。
- poky:指的是 Yocto Project 中的一个参考发行版和构建系统,通常用于嵌入式 Linux 开发。
- linux:表示目标平台是 Linux 操作系统。
答案:上图中aarch64-linux-gnu
下载地址:Linaro Releases