Arm

在程序和作業系統方面,32 位 vs 64 位 vs ARM

  • April 18, 2014

因此,當我執行 Raspbian(基本上是帶有 LXDE 的 ARM Debian 衍生產品)時,我可以使用 aptitude 安裝任何普通軟體包。但是,例如,如果我想下載一個 .deb 文件,我將不得不選擇 32 位或 64 位並下載它,然後嘗試在 Raspbian 上執行它(它不會工作)。

為什麼從官方儲存庫安裝軟體包可以在 ARM 系統上執行?為什麼不兼容?

我對硬體和軟體位之間的區別也有些困惑。ARM是硬體,對吧?

TL,DR:如果您只能選擇“32 位”和“64 位”,那麼 Raspberry Pi(或任何其他基於 ARM 的電腦)都不適合。您需要一個用於 ARM 的軟體包,以及正確的啟動包,即armhf.

“32 位”和“64 位”只是處理器架構的特徵之一。許多處理器系列都有 32 位和 64 位變體(x86、ARM、Sparc、PPC、MIPS 等)。僅Debian就有 23 個官方二進制發行版,用於不同的處理器特性和不同的軟體特性。

您需要為您的系統安裝與ABI匹配的軟體包。ABI(應用程序二進制介面)包括處理器類型(更準確地說,它的指令集),還包括與程序互動方式相關的其他特徵。特別是,當程序呼叫庫中的程式碼時,ABI 確定庫函式的參數如何傳遞(在寄存器中或在堆棧中)。

在 PC 世界中,有兩個指令集(直到無關緊要的微小變化):

  • IA-32x86的變體,通常稱為 i386(Debian 使用的名稱)或 i686(與 IA-32 一樣,是 x86 架構系列的幾代);
  • x86-64,也稱為 x64 或 amd64(Debian 使用的名稱)(不要與完全不同的 IA-64 混淆)。

英特爾和 AMD 都生產實現 x86 和 x86-64 指令集的處理器。現代 PC 的處理器同時支持 x86-64 和 x86 指令集;較舊的 PC 具有僅支持 x86 的處理器。因為 x86 指令集使用 32 位寄存器,而 x86-64 指令集使用 64 位寄存器,並且因為每個指令集都有一個供所有 Linux 安裝使用的 ABI¹,所以這些通常被描述為“32 位”或“64 位”。在 PC 環境中,“32 位”表示“x86”,“64 位”表示“x86-64”。

ARM 處理器具有完全不同的指令集。您不能在 ARM 系統上安裝 x86 或 x86-64 軟體包。您需要一個用於 ARM 的包,用於正確的指令集,更一般地說,用於正確的 ABI。目前還沒有針對 64 位 ARM 處理器的主要 64 位發行版,因為引入 64 位指令集的ARMv8架構修訂版仍然非常新且不常見。然而,有多個 32 位 ABI,它們假定存在不同的處理器功能並使用不同版本的參數傳遞約定。Linux 上使用的主要 ARM ABI 有:

  • armel,基於ARM EABI 版本 2(稱為“ARM EABI”或簡稱“EABI”),採用little-endian化身;
  • armhf,它是 armel 的一個變體,它利用了較新 ARM CPU 的一些特性,特別是硬體浮點支持

所有支持 armhf 的設備也支持 armel;但是,給定的系統安裝必須是一致的。Raspbian 使用 armhf(事實上,它最初是作為 Debian 的 armel 到 armhf 的一個埠,當時 armhf 還是一個新事物)。

¹至少對於主流發行版而言。有些嵌入式發行版具有多個 x86 二進製版本,其中的軟體包針對不同版本的標準 C 庫(glibc、dietlibc、uclibc 等)編譯。

引用自:https://unix.stackexchange.com/questions/125295