É possível executar o Raspberry Pi 3 com um kernel de 64 bits e um espaço de usuário de 32 bits?

8

Acabei de colocar minhas mãos em um Raspberry Pi 3 e gostaria de começar a experimentá-lo, especialmente em relação ao conjunto de instruções de 64 bits.

Estou bem ciente dos prós e contras do conjunto de instruções de 32 bits versus o de 64 bits, portanto, fique com a pergunta original: É possível executar um kernel de 64 bits utilizando os aplicativos de espaço do usuário de 32 bits atuais ?

É suficiente compilar o kernel com o compilador de 64 bits e carregar a imagem no RasPi ou existem outras etapas envolvidas que eu deva estar ciente? Você poderia me dar uma visão geral de alto nível do que devo considerar como um roteiro? Como, módulos / drivers que podem / irão quebrar se eu instalar o kernel de 64 bits. Preciso recompilar tudo?

Navegando na Internet, sei que é possível para algumas outras classes de dispositivos, e que geralmente executar essa configuração "híbrida" quebraria os gerenciadores de pacotes, mas não estou preocupado com a capacidade de gerenciamento no momento. Portanto, mesmo que isso interrompa os gerenciadores de pacotes e seja um inferno para manter, eu gostaria de entender como isso é feito.

Esteja ciente de que ainda estou aprendendo a compilar o kernel, mas ainda tenho experiência no desenvolvimento de aplicativos C / C ++ por um longo tempo. Este é o meu projeto de estimação para ter uma compreensão profunda da arquitetura linux e das características internas do kernel.

Daniela Petruzalek
fonte
O dragonboard 410c usa o mesmo processador arm64 bit e possui um ubuntu personalizado pelo linaro.

Respostas:

3

É possível executar o Raspberry Pi 3 com um kernel de 64 bits e um espaço de usuário de 32 bits?

Sim. Algumas imagens pré-construídas já estão prontas:

normalmente, executar essa configuração "híbrida" quebraria os gerenciadores de pacotes, mas não estou preocupado com a capacidade de gerenciamento no momento. Portanto, mesmo que isso quebre os gerenciadores de pacotes e seja um inferno manter

Não é prático usar multiarch com Raspbian, pois ele não possui pacotes upstream de 64 bits, e o parente mais próximo de 64 bits (Debian arm64) possui versões incompatíveis de pacotes. Para executar programas de 64 bits no Raspbian, você pode usar binários estáticos, contêineres (LXC, systemd-nspawn) ou chroot [1] . Esse isolamento evita conflitos típicos de pacotes inerentes ao mutiarch.

Você não precisa recompilar nada, pois os binários para todos os itens acima (terra do usuário Raspbian de 32 bits, kernel de 64 bits, pacotes Debian arm64 userland) estão prontamente disponíveis.

Como, módulos / drivers que podem / irão quebrar se eu instalar o kernel de 64 bits.

No momento da gravação da câmera SoC, a decodificação acelerada de vídeo com MMAL e o suporte USB de alta velocidade (via FIQ) são conhecidos por serem quebrados nos kernels do Raspberry Pi de 64 bits.

[1] Veja o SO de 64 bits no Raspberry Pi 4 para obter instruções sobre como criar um chroot.

jdonald
fonte
2

Claro, é possível. Os sistemas operacionais de 64 bits fazem isso o tempo todo *. Isso acontece quando você está em um sistema operacional de 64 bits e abre um aplicativo de 32 bits (também conhecido como aplicativo de espaço do usuário de 32 bits).

Mas, às vezes, pode haver problemas com bibliotecas / dependências. Uma vez encontrei um erro em um PC , algo sobre wrong ELF class. Resolvido instalando a biblioteca de 32 bits apropriada ia32-libs.

Não tenho muita certeza de como isso se comportaria em uma máquina ARM, pois não há um kernel oficial de 64 bits para o Pi com o qual eu possa jogar (ainda).

Além disso, não basta compilar o kernel com um compilador de 64 bits e carregá-lo no Pi. Se fosse assim tão simples, já estaríamos executando o Pi 3 com um kernel de 64 bits.

PNDA
fonte
+1 O Windows torna isso muito óbvio com a divisão de arquivos de programa. Aplicativos de 64 bits são armazenados C:\Program Filese aplicativos de 32 bits são armazenados C:\Program Files (x86).
Jacobm001
11
@ Jacobm001 Há uma diferença mais sutil no Windows. No Linux, você simplesmente precisava das bibliotecas de 32 bits apropriadas. Para o Windows, tecnicamente existem duas versões do Windows instaladas no seu PC: a versão de 32 bits, que está armazenada SysWOW64, e a de 64 bits, que está armazenada system32. O Windows identifica o executável e faz com que o aplicativo de 32 bits veja SysWOW64como system32. O mesmo acontece com Program Fileso registro. Os aplicativos de 32 bits C:\Program Files (x86)são simples, C:\Program Filesmas todas as alterações nele C:\Program Files (x86).
PNDA 24/03
11
@ Jacobm001 Eu sou divertido em festas.
PNDA 24/03/16
2

Você precisa dos dois conjuntos de bibliotecas e das duas arquiteturas compiladas nas bibliotecas corretas, para que 2 criem ambientes. Procure multi-arch e seu bsse preferido para obter indicadores. Gostar

https://wiki.debian.org/MultiarchCrossToolchainBuild

Então, você precisaria fazer algo assim, mas no espaço Rasbian. Portanto, a construção de um kernel arm64 e de um usuário armhf e dois conjuntos de bibliotecas adequadamente vinculados para cada um.

Aqui você pode ver alguém fazendo isso em um quadro diferente:

https://groups.google.com/forum/#!topic/linux.debian.ports.arm/ankucgztcI8

E veja as experiências deles.

EMSmith
fonte