A arquitetura do kernel é a arquitetura "preferida" do kernel; é a arquitetura dada por uname -m
e arch
(que são equivalentes). Por exemplo, em um kernel de 64 bits em execução em uma CPU compatível com x86 de 64 bits, será x86_64
.
Em algumas plataformas, o kernel pode executar binários para múltiplas arquiteturas; por exemplo, um kernel x86 de 64 bits também pode executar binários de 32 bits (com duas ABIs, o "antigo" i386
/ i686
ABI e x32
). Ele suporta isso instruindo a CPU a ser executada no modo de 32 bits ao executar esses binários e fornecendo conversão entre as chamadas de sistema de 32 bits e suas chamadas de sistema de 64 bits nativas. Com a adição de emulação de usuário em terra via QEMU, o kernel também pode executar binários para qualquer arquitetura suportada pelo QEMU: por exemplo, armhf
em uma CPU Intel de 64 bits. Além dos próprios binários e da camada de tradução necessária, você também precisará das bibliotecas apropriadas, na mesma arquitetura do binário. é isso que o multi-arch ajuda e, antes da multi-arch, a divisão de trabalho /lib32
/ /lib64
. (E se você acha que lidar com duas ou três ABIs é muito, dê uma olhada nos sistemas MIPS ...)
Neste contexto, "arquitetura do sistema operacional" pode significar várias coisas: pode ser a arquitetura usada na instalação do sistema ou a arquitetura usada pela maioria dos binários do sistema, etc. Nos derivados do Debian, é a arquitetura do pacote dpkg
instalado, conforme fornecido por dpkg --print-architecture
.
Quando você cria um binário, a arquitetura mais fácil de segmentar é a arquitetura de destino padrão do seu compilador, supondo que você também tenha as bibliotecas apropriadas. Normalmente, essa será a arquitetura do sistema operacional, seja lá o que isso signifique. A arquitetura do kernel não é particularmente significativa aqui. Nos derivados do Debian, a expansão de multi-arch para cobrir a compilação cruzada significa que está ficando mais fácil construir binários para qualquer arquitetura Debian suportada, em qualquer sistema Debian; mas esse é um caso de uso bastante específico e ainda requer um nível razoável de familiaridade com as restrições de compilação cruzada. Então, fique com a arquitetura padrão ...
uname -i
imprime uma variante da arquitetura do kernel, quando imprime qualquer coisa; uname -p -i são desconhecidos lhe dirão mais sobre isso.