arm64和aarch64之间的差异

Olo*_*rin 58 android gcc arm ios arm64

我有两个"解锁"设备,一个iPad mini 3和一个Galaxy Edge 6,它们都有一个终端和一组简单的unix命令.我认为这两款设备都有arm64处理器,但是当我跑步时

uname -a
Run Code Online (Sandbox Code Playgroud)

在两台设备上我得到以下内容:

对于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
Run Code Online (Sandbox Code Playgroud)

对于三星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
Run Code Online (Sandbox Code Playgroud)

如果我没有错,那么J85mAP和GNU/Linux的最后一个信息代表固件,而倒数第二个信息,arm64和aarch64代表处理器.

我的问题如下:显然字符串"arm64"和"aarch64"不一样,但我一直认为arm64和aarch64是相同的.(甚至告诉你何时将arm64标签放在这里的问题上.)

那么,他们真的相同吗?

特别是,对于两个目标的交叉构建库,我应该担心什么?事实上,我考虑到了gcc 5.2.0,但也许还有较低版本.我可以通过

-target=arm64
Run Code Online (Sandbox Code Playgroud)

要么

-target=aarch64
Run Code Online (Sandbox Code Playgroud)

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

编辑 Hum,再次寻找,但没有成功.

pel*_*lus 42

似乎ARM64是由Apple和AARCH64由其他人创建的,最着名的是GNU/GCC人员.

经过一些谷歌搜索后,我发现了这个链接:

LLVM 64位ARM64/AArch64后端已合并

所以有意义的是,iPad称自己为ARM64,因为Apple使用LLVM,而Edge使用AARCH64,因为Android使用的是GNU GCC工具链.

  • 你的回答是正确的。ARM64/AArch64 合并的 [commit to clang](https://github.com/llvm-mirror/clang/commit/8d681a2f93552ae452fbde8840b8f1553c591d7a) 非常简单。arm64 和 aarch64 在大多数情况下似乎是同义词。 (6认同)
  • 尽管我没有什么要补充的上述信息,但我想强调一下https://events.linuxfoundation.org/images/stories/pdf/lcna_co2012_marinas.pdf的幻灯片10-它着重说明了Linux内核在ARM64下如何引用AARCH64。命名。因此,虽然交叉构建需要支持Linux内核头文件的二进制文件,但ARCH = arm64可能是正确的-即使目标是“ aarch64”。 (2认同)

小智 33

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指的是同一个东西.


小智 7

“AArch64”是官方名称,意思是“Arm Architecture 64-bit”。

“arm64”是一些人使用的非官方名称,因为官方名称很糟糕。

最初只有 32 位架构,称为“ARM”。然后在 2011 年 10 月, ARMv8-A 规范添加了一个名为“AArch64”的新 64 位执行状态,追溯性地将旧的 32 位架构重新命名为“AArch32”。然后,更让人困惑的是,2017 年,该公司将品牌名称从“ARM”(“Advanced RISC Machines”的缩写)更名为“Arm”。

Linux 于 2012 年添加了对 AArch64 的支持。该补丁集最初称为“aarch64”,但后来重命名为“arm64”。LLVM 社区和 Apple 于 2012 年开始并行在 clang 中支持它,LLVM 社区将其称为“aarch64”,Apple 将其称为“arm64”。Apple 开源了他们的更改,这两项工作以不同的名称共同存在于 LLVM 中,并最终于 2014 年合并,因此 LLVM/clang 现在只是将其称为“aarch64”。