在做嵌入式开发、交叉编译或者看 Linux 系统信息时,你一定见过两个名字:ARM64AArch64
有的工具链叫 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 是精确的架构技术术语

你会看到:

  • 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 是系统的叫法。

本质完全相同,只是世界不同。

如果你喜欢这种把底层原理讲清楚的技术分享,记得关注我。