32 bits vs 64 bits vs ARM em relação a programas e sistemas operacionais

5

Então, quando eu executo o Raspbian (basicamente um derivado do ARM Debian com o LXDE), eu posso instalar qualquer pacote normal usando o aptitude. Mas se, por exemplo, eu quisesse baixar um arquivo .deb, eu teria que escolher 32-bit ou 64-bit e baixá-lo, e tentar executá-lo em Raspbian (não funcionaria).

Por que a instalação de pacotes dos repositórios oficiais funciona em sistemas ARM? Por que não é incompatível?

Eu também estou um pouco confuso sobre a diferença entre os bits de hardware e software. ARM é hardware, certo?

    
por evamvid 17.04.2014 / 23:55

2 respostas

11

TL, DR: se você só tem a opção de “32 bits” e “64 bits”, nenhum dos dois é adequado para um Raspberry Pi (ou qualquer outro computador baseado em ARM). Você precisa de um pacote para o ARM e o correto para o boot, que é armhf .

“32 bits” e “64 bits” são apenas uma das características de uma arquitetura de processador. Muitas famílias de processadores vêm em variantes de 32 bits e 64 bits (x86, ARM, Sparc, PPC, MIPS,…). O Debian sozinho possui 23 distribuições binárias oficiais para diferentes características do processador e diferentes características de software.

Você precisa instalar um pacote que corresponda à ABI do seu sistema. A ABI (application binary interface) inclui o tipo de processador (mais precisamente, seu conjunto de instruções), mas também outras características relacionadas às formas como os programas interagem. Em particular, quando um programa faz uma chamada para o código que está em uma biblioteca, o ABI determina como os argumentos para a função de biblioteca são passados (em registradores ou na pilha).

No mundo do PC, existem dois conjuntos de instruções (até pequenas variações que não importam):

  • IA-32 , uma variante de x86 , comumente conhecido como i386 (o nome usado pelo Debian) ou i686 (que, como o IA-32, são gerações da série de arquitetura x86);
  • x86-64 , também conhecido como x64 ou amd64 (o nome usado pelo Debian) (não confunda com IA -64, que é completamente diferente).

Tanto a Intel quanto a AMD criam processadores que implementam os conjuntos de instruções x86 e x86-64. Os PCs modernos têm processadores que suportam os conjuntos de instruções x86-64 e x86; PCs mais antigos têm processadores que suportam apenas x86. Como o conjunto de instruções x86 usa registradores de 32 bits e o conjunto de instruções x86-64 usa registradores de 64 bits, e porque para cada conjunto de instruções existe uma única ABI usada por todas as instalações do Linux¹, elas são geralmente descritas como “32 bits ”Ou“ 64 bits ”. Em um contexto de PC, “32 bits” significa “x86” e “64 bits” significa “x86-64”.

Os processadores ARM têm um conjunto de instruções completamente diferente. Você não pode instalar um pacote x86 ou x86-64 em um sistema ARM. Você precisa de um pacote para o ARM, para o conjunto de instruções correto e, mais geralmente, para o ABI correto. Ainda não existem grandes distribuições de 64 bits para processadores ARM de 64 bits, porque a revisão de arquitetura ARMv8 que introduz um conjunto de instruções de 64 bits ainda é muito novo e não é comumente disponível. No entanto, existem diversas ABIs de 32 bits, que pressupõem a existência de diferentes recursos de processador e usam diferentes versões da convenção de passagem de argumentos. As principais ABIs de ARM usadas no Linux são:

  • armel , baseado no ARM EABI versão 2 (conhecido como" ARM EABI "ou" EABI "para abreviar), no seu little -endian encarnação;
  • armhf , que é uma variante do armel que aproveita alguns recursos dos processadores ARM mais novos, em particular h ardware f

Todos os dispositivos que suportam armhf também suportam armel; no entanto, uma determinada instalação do sistema deve ser consistente. Raspbian usa o armhf (na verdade, ele começou como uma porta do armel do Debian para armhf, quando o armhf era uma coisa nova).

¹ Pelo menos para distribuições mainstream. Existem distribuições embutidas que possuem várias versões binárias x86, com pacotes compilados contra diferentes versões da biblioteca C padrão (glibc, dietlibc, uclibc,…).

    
por 18.04.2014 / 03:19
0

So when I run Raspbian (basically a ARM Debian derivative with LXDE), I can install any normal package using aptitude.

Se você estiver executando o Raspbian, o aptitude obtém seus pacotes do repositório Raspbian. Como explicado na FAQ do Raspbian , os pacotes são compilados para o ARMv6 usado no Raspberry Pi. Você não está usando pacotes oficiais do Debian. Novamente a partir do FAQ, o Debian armhf suporta processadores ARMv7-A e superiores, e o armel da Debian suporta CPUs ARM menos capazes.

I would have to choose 32-bit or 64-bit and download that

Se você quer dizer "escolhendo entre x86 e x86_64", eles são compilados para a arquitetura x86 (ou melhor, para i686 atualmente ) ou x86_64 . Eles não funcionarão na arquitetura ARM . Você teria que encontrar e baixar um .deb compilado para Raspbian (ou com as mesmas opções ), ou compilá-lo você mesmo.

I'm also a little confused about the difference between hardware and software bits.

Não tenho certeza se entendi bem a pergunta, mas os processadores que suportam x86_64 também podem rodar 32bits x86, então você pode instalar a versão 32bit de uma distro em uma CPU recente e usar apenas 32bit no hardware x86_64.

    
por 18.04.2014 / 01:13