一,Arm 构架
下面是常见的 ARM 架构 及其每个架构的常用 CPU 的表格。每个架构适应不同的市场需求,所包含的 CPU 核心也有所不同,具体如下:
ARM 架构版本 | 常见的 CPU 核心 | 应用领域 | 常见 SoC 示例 |
---|---|---|---|
ARMv7-A | Cortex-A8, Cortex-A9, Cortex-A7, Cortex-A15, Cortex-A17 | 智能手机、嵌入式设备、平板、汽车信息娱乐、电视、工业控制等 | i.MX6ULL(NXP)<br> Allwinner A20 |
ARMv7-M | Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7 | 低功耗微控制器、嵌入式设备、传感器、消费电子、家电、汽车等 | STM32F103 Cortex-M3 STM32F4 Cortex-M4 |
ARMv8-A | Cortex-A53, Cortex-A57, Cortex-A72, Cortex-A73, Cortex-A75, Cortex-A76, Cortex-A77, Cortex-A78 | 高性能智能手机、平板、嵌入式设备、服务器、数据中心、边缘计算、AI 加速等 | RK3399(Rockchip)<br> Exynos 9810(Samsung) |
ARMv8-M | Cortex-M23, Cortex-M33 | 低功耗嵌入式系统、物联网设备、传感器、家电、可穿戴设备等 | STM32L5 |
ARMv8-R | Cortex-R4, Cortex-R5, Cortex-R7, Cortex-R8 | 实时处理系统、汽车控制、工业控制、航空电子设备 | i.MX7(NXP)<br> Renesas R-Car |
ARMv9-A | Cortex-X1, Cortex-A78C, Cortex-A78, Cortex-A710 | 高性能计算、智能手机、汽车信息娱乐、5G 基站、AI 加速、云端服务器 | Cortex-X1(用于高端定制芯片)<br> Exynos 2100(Samsung) |
ARMv8.1-A | Cortex-A72, Cortex-A73, Cortex-A76 | 虚拟化、高性能计算、增强安全性等 | HiSilicon Kirin 970(Huawei)<br> Exynos 8890(Samsung) |
ARMv8.2-A | Cortex-A76, Cortex-A77 | 高效的浮点运算、增强的内存一致性、多核高效计算、服务器应用 | Qualcomm Snapdragon 855<br> NVIDIA Jetson Xavier NX |
ARMv8.3-A | Cortex-A73, Cortex-A75 | 多核处理器应用、增强浮点运算、机器学习、云计算等 | Qualcomm Snapdragon 845<br> MediaTek Dimensity 1000 |
ARMv9-R | Cortex-R82 | 高可靠性实时应用、汽车、工业控制、航空电子 | Renesas R-Car H3<br> i.MX 8X(NXP) |
说明:
-
ARMv7-A:适用于 32 位应用,例如一些较老的智能手机、嵌入式设备,尤其在多年前很流行。常见的 Cortex-A8 和 Cortex-A9 核心至今仍有应用。
-
ARMv8-A:引入了 64 位计算,向前兼容 32 位模式(AArch32),适用于现代智能手机、高性能计算以及服务器等场景。包括了从 Cortex-A53(低功耗)到 Cortex-A76(高性能)等多个核心。
-
ARMv8-M:是专为 低功耗嵌入式设备 和 物联网应用 设计的架构,提供了适用于微控制器的 Cortex-M 核心,例如 Cortex-M0 和 Cortex-M4。
-
ARMv8-R:针对 实时系统,如汽车电子、工业控制等应用,提供了高可靠性和低延迟的 Cortex-R 系列核心。
-
ARMv9-A:是 ARMv8-A 的继任者,支持更强的 安全性、AI 加速 和 虚拟化,适用于智能手机、服务器、AI 计算等场景,具有更强的计算能力和数据处理能力。
-
ARMv9-R:针对高可靠性的 实时系统,提升了性能和安全性,适用于高性能实时任务的场景。
各系列特点:
- Cortex-A 系列:主要用于 高性能计算,如智能手机、平板、服务器等。
- Cortex-M 系列:专为 低功耗、嵌入式设备 设计,适用于传感器、物联网设备、家电等。
- Cortex-R 系列:专为 实时应用 设计,适用于汽车、工业控制、航空等要求高实时性的系统。
通过这些不同的架构和 CPU 核心,ARM 能够满足从低功耗嵌入式设备到高性能计算平台等各种不同的需求。
交叉编译器(Cross Compiler)的命名通常遵循一定的规则,特别是在嵌入式开发中,以便区分目标平台的架构和主机平台。命名规则通常包括目标架构、操作系统、ABI(应用二进制接口)以及主机系统等信息。以下是常见的交叉编译器命名方式的详细解析:
二,交叉编译器的命名方式
交叉编译器的命名通常采用以下格式:
<target-triplet>-<compiler-name>-<version>
其中,<target-triplet>
描述了目标平台的架构,<compiler-name>
表示编译器的名称(例如 gcc
),<version>
是编译器的版本号。下面是对各部分的详细解释:
1. Target Triplet(目标三元组):
<target-triplet>
是交叉编译器命名的核心部分,它指定了目标平台的硬件架构、操作系统和应用二进制接口(ABI)。通常格式如下:
<arch>-<vendor>-<os>-<options>
arch:目标架构(如 arm
, x86_64
, aarch64
, mips
等)
vendor:目标平台的供应商或实现(通常是空值或 unknown
)
os:目标操作系统(如 linux
, win32
, elf
,或者 none
等表示裸机系统)
options:目除了这三部分,通常还会加上 ABI(应用二进制接口) 和 浮点支持 等信息,这些部分对于交叉编译器的正确配置非常重要
gnu:表示 GNU 工具链,用于构建和链接程序的标准工具集,通常用于 Linux 系统
eabi:表示 嵌入式应用二进制接口(Embedded Application Binary Interface),这是一个特定于嵌入式系统的 ABI,通常用于 ARMV7 处理器的开发。
hf:表示 硬件浮点支持(Hardware Floating Point),即编译器生成的代码将使用目标硬件的浮点运算单元,而不是依赖软件模拟浮点运算
注意:eabi与hf 是Armv7的特性,只有ArmV7版本的32位编译器才会带这2个特性,ArmV8版本的编译器 有两种版本arm开头,表示是编译成32位兼容旧版本的v7构架构。Armv8 64位编译器的options通常是gnu,省略了AArch64 ABI和HF,因为aarch64包含了这两项
2. Compiler Name(编译器名称)
编译器的名称通常是:
gcc
:GNU 编译器,适用于 C/C++ 编译。
g++
:GNU C++ 编译器。
clang
:一个替代 GCC 的编译器工具链。
ld
:GNU 链接器。
as
:GNU 汇编器。
所以,交叉编译器的名称会包括类似 arm-none-eabi-gcc
或 arm-linux-gnueabihf-gcc
,这些名称表明这是为相应的目标平台编译的编译器。
3. 版本号(Version)
大部分交叉编译器在命名时会包含编译器的版本号。比如:
arm-none-eabi-gcc-10.2.1
:表示版本号为10.2.1
的arm-none-eabi-gcc
编译器。aarch64-linux-gnu-gcc-9.3.0
:表示版本号为9.3.0
的aarch64-linux-gnu-gcc
编译器。
4. 常见的交叉编译器命名示例
编译器 | 目标架构 | 操作系统 | ABI |
---|---|---|---|
arm-none-eabihf-gcc | ARM(32位) | 裸机(没有操作系统) | EABI |
arm-linux-gnueabihf-gcc | ARM(32位) | Linux | GNU EABI,支持硬件浮点(hf) |
aarch64-linux-gnu-gcc | ARM(64位) | Linux | GNU,aarch64=AArch64 ABI+hf |
mipsel-linux-gnu-gcc | MIPS(小端格式) | Linux | GNU |
x86_64-linux-gnu-gcc | x86-64(64位) | Linux | GNU |
Arm构架与编译器名字
Armv7:编译器通常是arm-*—linux-gnueabihf
Armv8:编译器有两种:①兼容v7构架的arm-*-linux-gnueabihf;②64位的aarch64-*-linux-gnu
64位的Windows可以运行32位程序,应为他包含了32位的*.dll与*.lib
同样基于Armv8的一个64位系统也可以支持32位程序,查看到底是否支持要用到dpkg -l | grep libc6:i386 或者dpkg –print-foreign-architectures这个命令,如果支持那么一个本来在NXP能运行的程序也可以运行在Contex-A53上