为 Linux 或其他软件运行的 arm64/aarch64 的不同实现有什么区别?

dav*_*mos 15 linux arm arch-arm

对于x86_64架构的CPU,不管是Intel、AMD还是VIA。该架构的软件可以在其上正常运行。

但是,对于arm64/aarch64(arm64/aarch64的区别在这里),有很多厂商。对于 arm64/arch64 的 Linux 发行版,有很多方向。

是 Arch Linux ARM 的 arm 支持平台列表。

但是对于Debian,没有这么多的选择(只有 arm64 而对于 little endian 只有 armel)。

一季度。Archlinuxarm 的支持平台有什么区别?

为了弄清楚Q1,我用我的手机试了一下。我的手机架构是arm64v7el(4*ARMCortex-A73+4*ARMCortex-A53)。我为 armv7 - Raspberry Pi 2下载Archlinuxarm。并将 .tar.gz 文件解压到 Termux 主目录中的文件夹中。

然后我打开 Termux 并输入:

proot -r /path/to/my/archlinuxarm/rootfolder/
Run Code Online (Sandbox Code Playgroud)

不幸的是,据说 shell 解释器是不可执行的(在不同的体系结构中)。

也许,是因为Endian的不同。但是,对于 armv8,有一个 archlinuxarm 的下载选项,它是Generic

Q2。如果我为A平台安装一个archlinuxarm系统到B平台。是不能最大程度优化还是完全不兼容?

Q3。是否有不同平台的发行版只是驱动程序不同或编译Linux内核时参数不同?

第 4 季度。令我困惑的是,archlinuxarm 社区为什么不提供仅针对 arm64 armel 等的 stage rootfs tarball 而不是不同供应商的不同产品?这是否意味着例如 DragonBoard 410c 中的指令集与 Raspberry Pi 3 不同?或者换句话说,如果我将用于 DragonBoard 410c 的 Archlinuxarm 安装到 Raspberry Pi 3,会发生什么?能正常开机吗?

slm*_*slm 15

您的问题可能被解释为非常广泛,但我认为您实际问的问题非常具体。arm64 与 aarch64 的不同实现之间的根本区别。

您问题的核心是不同的 CPU 提供不同的指令集。我通常会参考这个名为:指令集列表 的维基百科页面,因为它是我在 Internet 上见过的最完整的列表。

指令集

每个微处理器的核心是一组它可以执行的指令。指令集的接口是编译器将高级编程语言(例如 C/C++)转换为机器代码的过程。该机器码是来自 CPU 指令集的指令。顺便提一下,指令集中的指令通常如下所示:

x86 nasm - https://rosettacode.org/wiki/Bitwise_operations#x86_Assembly
    extern printf
    global main

    section .text
main
    mov eax, dword [_a]
    mov ecx, dword [_b]
    push    ecx
    push    eax

    and     eax, ecx
    mov ebx, _opand
    call    out_ops
Run Code Online (Sandbox Code Playgroud)

注意:您还会听到称为汇编语言的机器代码。

arm64 与 aarch64

使用这两种架构,我能够从 SO 中找到这个答案:标题为:arm64 和 aarch64 之间的差异,其中说明差异如下:

AArch64 是Armv8-A 架构中引入的 64 位状态。向后兼容 Armv7-A 和以前的 32 位 Arm 架构的 32 位状态称为 AArch32。因此 64 位 ISA 的 GNU 三元组是 aarch64。Linux 内核社区选择将他们的内核端口调用到这个架构 arm64 而不是 aarch64,所以这就是一些 arm64 用法的来源。

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

所以 aarch64 和 arm64 指的是同一个东西。

你的一些问题

您提出的问题太多而无法在一个问题中回答。不过,我会尝试回答最重要的问题。

第 4 季度。令我困惑的是,archlinuxarm 社区为什么不提供仅针对 arm64 armel 等的 stage rootfs tarball 而不是不同供应商的不同产品?这是否意味着例如 DragonBoard 410c 中的指令集与 Raspberry Pi 3 不同?或者换句话说,如果我将用于 DragonBoard 410c 的 Archlinuxarm 安装到 Raspberry Pi 3,会发生什么?能正常开机吗?

对于这方面的细节,您必须询问 Arch 社区为什么他们选择在该项目中做事。关于在 Raspberry Pi 3 上运行专为 410c 构建的 Archlinuxarm 的问题,我的建议是尝试一下。

这两个 CPU 都是 ARM 处理器,如下所示:

SS1

所以我的期望是你可以在两者上使用相同的二进制文件。最后,我可能会在 Raspberry Pi Stackexchange 站点上提出后续问题。您在那里提出的问题有很多问题,例如:

参考