Arm64和 aarch64之间的差异

我有两个“解锁”的设备,一个是 iPad mini 3,一个是 Galaxy Edge 6,它们都配备了终端和一组最简单的 unix 命令。我以为两个设备都有 arm64处理器,但当我跑步的时候

uname -a

在这两个设备上,我得到了以下信息:

IPad mini 3:

xxxxs-iPad:/var/mobile root# uname -a
Darwin xxxx-iPad 14.0.0 Darwin Kernel Version 14.0.0: Wed Jun 24 00:50:15 PDT 2015; root:xnu-2784.30.7-30/RELEASE_ARM64_S5L8960X iPad4, **arm64**, J85mAP

三星Galaxy S6边缘:

u0_a203@zerolte:/ $ uname -a
Linux localhost 3.10.61-4497415 #1 SMP PREEMPT Thu Apr 9 15:06:40 KST 2015 **aarch64** GNU/Linux

如果我没有猜错的话,这两个例子中的最后一个信息 J85mAP 和 GNU/Linux 代表固件,倒数第二个信息 arm64和 aarch64代表处理器。

我的问题如下: 很明显,字符串“ arm64”和“ aarch64”是不一样的,但我一直认为 arm64和 aarch64是一样的。(甚至当你在这里把 arm64标签放在一个问题上时,它也会显示出来。)

他们真的一模一样吗?

特别是,如果两个目标都需要跨构建库,我应该担心什么?实际上,我想到的是 gcc5.2.0,但也可能是更低的版本。能让我过去吗

-target=arm64

或者

-target=aarch64

根据我的目标设备,只是担心其余的选项配置?

哼,再找一遍,没找到。

195843 次浏览

ARM64似乎是由苹果公司和 AARCH64由其他公司创造的,其中最著名的是 GNU/GCC 公司。

在谷歌了一下之后,我发现了这个链接:

LLVM 64位 ARM64/AArch64后端已合并

因此,iPad 自称 ARM64是有道理的,因为苹果使用 LLVM,Edge 使用 AARCH64,因为 Android 使用 GNU GCC 工具链。

AArch64是 Armv8-A 架构(https://en.wikipedia.org/wiki/ARM_architecture#ARMv8-A)中引入的64位状态。向后兼容 Armv7-A 和以前的32位 ARM 架构的32位状态称为 AArch32。 因此,64位 ISA 的 GNU 三联体是 aarch64。 Linux 内核社区选择将他们的内核端口调用到这个架构 arm64,而不是 aarch64,所以 arm64的一些使用来自这里。

据我所知,aarch64的苹果后端被称为 arm64,而 LLVM 社区开发的后端被称为 aarch64(因为它是64位 ISA 的规范名称) ,后来两者合并,现在的后端被称为 aarch64。

所以 AArch64和 ARM64指的是同一件事。

海湾合作委员会认为他们不同;

Https://gcc.gnu.org/onlinedocs/gcc/aarch64-options.html

Https://gcc.gnu.org/onlinedocs/gcc/arm-options.html

LLVM 认为它们是一样的;

Https://www.phoronix.com/scan.php?page=news_item&px=mty5odk

Linux 认为它们是一样的;

find ./* -name aarch64
./tools/testing/selftests/kvm/lib/aarch64
./tools/testing/selftests/kvm/include/aarch64
./tools/testing/selftests/kvm/aarch64


find ./* -name arm64
./arch/arm64
./Documentation/arm64
./Documentation/translations/zh_CN/arm64
./drivers/acpi/arm64
./include/config/crypto/ghash/arm64
./include/config/crypto/crct10dif/arm64
./include/config/crypto/aes/arm64
./include/config/crypto/sha1/arm64
./include/config/crypto/sha2/arm64
./include/config/crypto/sm3/arm64
./include/config/crypto/sha512/arm64
./include/config/arm64
./include/config/exynos/arm64
./scripts/dtc/include-prefixes/arm64
./tools/testing/selftests/arm64
./tools/arch/arm64
./tools/perf/arch/arm64
./tools/perf/pmu-events/arch/arm64

人们很容易犯这样的错误: 它们是不一样的。我有一个美信集成产品库,大概是用 GNU 工具链开发的(aarch64)。它在 arm64的 XCode 开发环境中完全不可用。MacBook Pro 的型号是 A1278。XCode 是12.4版。MacOS Catalina v10.15.7.Mac 上的 ld 命令将表明我们正在尝试链接一种不受支持的未知文件格式。进一步的研究表明,用 ar 命令创建的 Maxim 库需要通过在其上运行 ranlib 进行修改。一开始我以为这是一个 aarch64和 arm64的问题,但我错了。