在做嵌入式开发、交叉编译或者看 Linux 系统信息时,你一定见过两个名字:ARM64 和 AArch64。
有的工具链叫 aarch64-linux-gnu-gcc,有的系统架构却显示 arm64,看起来像是两个东西,其实说的是同一件事。
但它们的叫法,来自两个不同的视角。
一切要从 ARMv8 说起
从 ARMv8 开始,ARM 正式引入了 64 位架构。
同时,ARM 公司也对架构的命名方式做了一次非常系统的规划。
ARMv8 之后,ARM 不再简单用“32 位 / 64 位”区分,而是引入了两个执行状态(Execution State):
执行状态
名称
位数
AArch32
32 位执行状态
32-bit
AArch64
64 位执行状态
64-bit
注意这里的关键词:Execution State(执行状态)。
AArch64 是 ARM 官方的“技术名称”,表示 CPU 运行在 64 位执行状态下。
那 ARM64 是什么?
ARM64 不是 ARM 官方的架构命名。
它是操作系统世界给 AArch64 起的“通俗名字”。
最早是 Linux 内核社区、Debian、Ubuntu、Android 这些系统在做架构适配时,为了和原来的 arm(32 位)区分,采用了更直观的叫法:
- 32 位:arm
- 64 位:arm64
久而久之,ARM64 变成了操作系统、发行版、软件仓库里的标准叫法。
比如:
- Debian 架构名:arm64
- Ubuntu 架构名:arm64
- Android ABI:arm64-v8a
- Docker 架构:arm64
因为AArch64 是精确的架构技术术语。
你会看到:
- aarch64-linux-gnu-gcc
- aarch64-none-elf-gcc
- QEMU:QEMU-system-aarch64
- GNU triplet:aarch64-linux-gnu
这是因为在编译器、汇编器、虚拟机这些贴近指令集和CPU架构的领域,必须使用 ARM 官方定义的名字。
这里强调的是:CPU 正在以 AArch64 执行状态运行。
本质区别一句话总结
AArch64 是 ARM 官方定义的 CPU 执行架构名 ARM64 是操作系统世界对它的通俗叫法
就像:
- x86_64 vs amd64
- i386 vs x86
是同一个东西,不同圈子不同叫法。
为什么会同时存在,不统一?
因为这两个名字服务的对象不同:
场景
使用名称
ARM 架构文档 / 指令集 / 手册
AArch64
编译器 / 汇编器 / QEMU
AArch64
Linux 发行版 / 软件仓库 / 包管理
ARM64
Android / Docker / 云服务器
ARM64
一个偏底层架构语义,一个偏工程与生态习惯。
一个非常典型的现象
在 RK3588、树莓派、服务器上你会看到:
uname -maarch64但:
dpkg --print-architecturearm64很多人第一次看到这里会以为系统有问题,其实没有任何问题——它们在说同一件事。
你可以这样记忆
看“CPU和指令集” → AArch64 看“系统和软件生态” → ARM64为什么理解这个很重要?
当你在做:
- 交叉编译
- 裸机开发
- 工具链选择
- Docker 架构选择
- Debian/Ubuntu 软件包适配
如果你不理解这两个名字的关系,会误以为选错架构,甚至下载错工具链。
实际上:
aarch64 == arm64只是不同语境下的名字。
最后一句话
AArch64 是工程师的叫法,ARM64 是系统的叫法。
本质完全相同,只是世界不同。
如果你喜欢这种把底层原理讲清楚的技术分享,记得关注我。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.