arm64和aarch64的区别
Posted
技术标签:
【中文标题】arm64和aarch64的区别【英文标题】:Differences between arm64 and aarch64 【发布时间】:2015-10-29 08:33:44 【问题描述】:我有两个“解锁”的设备,一个 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 Edge:
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 标签放到这里的问题上时,它甚至会被告知。)
那么,它们真的相同吗?
特别是,如果为两个目标交叉构建库,我应该担心什么?事实上,我想到的是 gcc 5.2.0,但也可能是更低的版本。我可以通过吗
-target=arm64
或
-target=aarch64
根据我的目标设备,只需担心要配置的其余选项?
EDIT 哼,再找这个,没有成功。
【问题讨论】:
containerd
将“aarch64”规范化为“arm64”,所以从这个意义上说,它们都是相同的github.com/containerd/containerd/blob/v1.2.6/platforms/…
【参考方案1】:
AArch64 是 Armv8-A 架构中引入的 64 位状态 (https://en.wikipedia.org/wiki/ARM_architecture#ARMv8-A)。与 Armv7-A 和以前的 32 位 Arm 架构向后兼容的 32 位状态称为 AArch32。 因此 64 位 ISA 的 GNU 三元组是 aarch64。 Linux 内核社区选择将他们的内核端口称为此架构 arm64 而不是 aarch64,因此这就是一些 arm64 使用的来源。
据我所知,aarch64 的 Apple 后端称为 arm64,而 LLVM 社区开发的后端称为 aarch64(因为它是 64 位 ISA 的规范名称),后来两者合并,现在后端称为 aarch64。
所以 AArch64 和 ARM64 指的是同一个东西。
【讨论】:
【参考方案2】:似乎 ARM64 是由 Apple 创建的,而 AARCH64 是由其他人创建的,最著名的是 GNU/GCC 人。
经过一番谷歌搜索,我找到了这个链接:
The LLVM 64-bit ARM64/AArch64 Back-Ends Have Merged
所以这是有道理的,iPad 称自己为 ARM64,因为 Apple 使用 LLVM,Edge 使用 AARCH64,因为 android 使用 GNU GCC 工具链。
【讨论】:
感谢这个答案。所以,至少在理论上,对于从 mac os 或 ubuntu 到 ipad 或 edge 的交叉编译 gcc,我不应该真正担心传递给配置脚本的 -target 选项,只要它是 arm64 和 aarch64 之一?跨度> 虽然我对上述信息没有什么新的补充,但我想强调events.linuxfoundation.org/images/stories/pdf/… 的幻灯片 10 - 它强调了 Linux Kernel 如何在 ARM64 命名下引用 AARCH64。因此,虽然交叉构建需要支持 linux 内核头文件的二进制文件,但 ARCH=arm64 可能是正确的——即使目标是“aarch64”。 你的答案是正确的。用于 ARM64/AArch64 合并的 commit to clang 非常简单。 arm64 和 aarch64 在大多数情况下看起来是同义词。【参考方案3】:很容易误认为它们不一样。我有一个来自 Maxim Integrated 的库,大概是用 GNU 工具链(aarch64)开发的。在 arm64 的 XCode 开发环境中完全无法使用。 MacBook Pro 型号为 A1278。 XCode 是 12.4 版。 macOS Catalina v10.15.7。 Mac 上的 ld 命令将表明我们正在尝试链接未知的不受支持的文件格式。进一步调查表明,我相信使用 ar 命令创建的 Maxim 库需要通过对其运行 ranlib 进行修改。起初我以为这是 aarch64 与 arm64 的问题;我错了。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 有人能解释一下这个场景中的具体细节吗?实际的底层 ISA 是否兼容,这是某种 ABI 或约定不兼容在起作用?听起来这里的回答者确实让它以某种方式“与 ranlib”一起工作。【参考方案4】:GCC 认为他们不同;
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
【讨论】:
ARM 与 ARM64 不同。我认为您将两者混淆了。【参考方案5】:x86/x64 处理器:它们速度快、功能强大,但需要大量电力。因此,它们用于可以插入墙壁的台式计算机中。所有版本的 Windows 都在 x86/x64 上运行。
ARM 和 AARCH64 处理器:它们是用于智能手机和其他未插入墙壁的设备的弱但低功耗的处理器。移动 ios 和 Android 操作系统在 ARM 上运行。
【讨论】:
以上是关于arm64和aarch64的区别的主要内容,如果未能解决你的问题,请参考以下文章
Linux-我可以在aarch64体系结构上运行arm64二进制文件吗?
aarch64-linux-gnu-g++ 交叉编译为 arm64 错误
centos aarch64(arm64) iso 下载地址