私は2つの「ロック解除された」デバイス、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
samsung 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の両方の場合の最後の情報はファームウェアを表し、最後から2番目の情報はarm64とaarch64を表します。
私の質問は次のとおりです。明らかに、文字列「arm64」と「aarch64」は同じではありませんが、私は常にarm64とaarch64は同じだと思っていました。 (ここで質問にarm64タグを付けたときにも通知されます。)
それで、彼らは本当に同一ですか?
特に、両方のターゲットのライブラリをクロスビルドする場合、何を心配する必要がありますか?実際、gcc 5.2.0を念頭に置いていますが、おそらくそれよりも低いバージョンもあります。合格してもいいですか
-target=arm64
または
-target=aarch64
私がターゲットとするデバイスに応じて、設定する残りのオプションを心配するだけですか?
EDITうーん、成功せずにこれをもう一度探してください。
ARM64はAppleによって作成され、AARCH64は他の人、特にGNU/GCCによって作成されたようです。
いくつかのグーグルの後、私はこのリンクを見つけました:
LLVM 64ビットARM64/AArch64バックエンドがマージされました
したがって、理にかなっているのは、AppleがLLVMを使用し、AndroidがGNU GCCツールチェーンを使用しているため、iPadはARM64と呼ばれ、EdgeはAARCH64を使用します。
AArch64はArmv8-Aアーキテクチャで導入された64ビット状態です( https://en.wikipedia.org/wiki/ARM_architecture#ARMv8-A )。 Armv7-Aおよび以前の32ビットArmアーキテクチャと下位互換性のある32ビット状態は、AArch32と呼ばれます。したがって、64ビットGNUのISAトリプレットはaarch64です。 Linuxカーネルコミュニティは、カーネルのポートをaarch64ではなくこのアーキテクチャarm64に呼び出すことを選択したため、arm64の使用法の一部がここから来ています。
私が知る限り、aarch64のAppleバックエンドはarm64と呼ばれ、LLVMコミュニティが開発したバックエンドはaarch64と呼ばれ(64ビットISAの正規名であるため)、その後2つがマージされ、バックエンドは現在aarch64と呼ばれています。
したがって、aarch64とarm64は同じものを指します。