¿Es posible ejecutar Raspberry Pi 3 con un kernel de 64 bits y un espacio de usuario de 32 bits?

8

Acabo de tener en mis manos una Raspberry Pi 3 y me gustaría comenzar a experimentar con ella, especialmente con respecto al conjunto de instrucciones de 64 bits.

Soy consciente de los pros y los contras del conjunto de instrucciones de 32 bits versus el conjunto de instrucciones de 64 bits, por lo que debe atenerse a la pregunta original: ¿es posible ejecutar un núcleo de 64 bits utilizando las aplicaciones de espacio de usuario actuales de 32 bits? ?

Es suficiente compilar el kernel con un compilador de 64 bits y cargar la imagen en RasPi o ¿hay algún otro paso involucrado que deba tener en cuenta? ¿Podría darme una descripción general de alto nivel de lo que debería mirar como una hoja de ruta? Al igual que los módulos / controladores que podrían / ​​se romperán si instalo el kernel de 64 bits. ¿Necesito recompilar todo?

Navegando por Internet, sé que es posible para algunas otras clases de dispositivos, y que, por lo general, ejecutar esta configuración "híbrida" rompería los administradores de paquetes, pero en este momento no me preocupa la capacidad de administración. Entonces, incluso si rompe los administradores de paquetes y es un infierno mantenerlo, me gustaría entender cómo se hace.

Tenga en cuenta que todavía estoy aprendiendo cómo compilar el núcleo, pero todavía tengo experiencia desarrollando aplicaciones C / C ++ durante mucho tiempo. Este es mi proyecto favorito para tener una comprensión profunda de la arquitectura de Linux y los elementos internos del kernel.

Daniela Petruzalek
fuente
El dragonboard 410c usa el mismo procesador arm64 bit y tiene un ubuntu personalizado por linaro.

Respuestas:

3

¿Es posible ejecutar Raspberry Pi 3 con un kernel de 64 bits y un espacio de usuario de 32 bits?

Si. Algunas imágenes preconstruidas tienen esto listo para usar:

Por lo general, ejecutar esta configuración "híbrida" rompería los administradores de paquetes, pero no me preocupa la capacidad de administración en este momento. Entonces, incluso si se rompe el paquete de administradores y es un infierno mantener

No es práctico usar multiarch con Raspbian, ya que no tiene paquetes ascendentes de 64 bits, y el pariente más cercano de 64 bits (Debian arm64) tiene versiones de paquetes incompatibles. Para ejecutar programas de 64 bits en Raspbian, puede usar binarios estáticos, contenedores (LXC, systemd-nspawn) o chroot [1] . Tal aislamiento evita los típicos conflictos de paquetes inherentes a la mutiarca.

No necesita volver a compilar nada porque los binarios para todo lo anterior (Raspbian 32-bit userland, 64-bit kernel, Debian arm64 userland paquetes) están fácilmente disponibles.

Al igual que los módulos / controladores que podrían / ​​se romperán si instalo el kernel de 64 bits.

Al momento de escribir la cámara SoC, se sabe que la decodificación de video acelerada con MMAL y el soporte USB de alta velocidad (a través de FIQ) están rotos bajo los núcleos Raspberry Pi de 64 bits.

[1] Consulte el sistema operativo de 64 bits en Raspberry Pi 4 para obtener instrucciones sobre cómo crear tal chroot.

jdonald
fuente
2

Claro que es posible. Los sistemas operativos de 64 bits lo hacen todo el tiempo *. Ocurre cuando estás en un sistema operativo de 64 bits y abres una aplicación de 32 bits (también conocida como aplicación de espacio de usuario de 32 bits).

Pero a veces, puede haber problemas con las bibliotecas / dependencias. Una vez encontré un error en una PC , algo sobre wrong ELF class. Se solucionó instalando la biblioteca de 32 bits adecuada ia32-libs.

No estoy muy seguro de cómo se comportaría esto en una máquina ARM ya que no hay un kernel oficial de 64 bits para el Pi con el que pueda jugar (todavía).

Además, uno no solo compila el núcleo con un compilador de 64 bits, sino que lo carga en el Pi. Si fuera así de simple, ya estaríamos ejecutando el Pi 3 con un núcleo de 64 bits.

PNDA
fuente
+1 Windows lo hace muy obvio con la división de archivos de programa. Las aplicaciones de 64 bits se almacenan C:\Program Filesy las aplicaciones de 32 bits se almacenan en C:\Program Files (x86).
Jacobm001
1
@ Jacobm001 Hay una diferencia más sutil con Windows. En Linux, simplemente necesitabas las bibliotecas apropiadas de 32 bits. Para Windows, técnicamente hay dos versiones de Windows instaladas en su PC: la versión de 32 bits, que está almacenada SysWOW64, y la de 64 bits, que está almacenada system32. Windows identifica el ejecutable y lo hace para que la aplicación de 32 bits vea SysWOW64como system32. Lo mismo sucede con Program Filesel registro. Las aplicaciones de 32 bits se ven C:\Program Files (x86)como simples, C:\Program Filespero cualquier cambio se aplica C:\Program Files (x86).
PNDA
1
@ Jacobm001 Soy divertido en las fiestas.
PNDA
2

Necesita ambos conjuntos de bibliotecas y ambas arquitecturas compiladas en las bibliotecas correctas, por lo que 2 entornos de compilación. Busque múltiples arcos y su bsse preferido para obtener punteros. Me gusta

https://wiki.debian.org/MultiarchCrossToolchainBuild

Entonces necesitarías hacer algo así pero en el espacio Rasbian. Por lo tanto, la construcción de un kernel arm64 y la tierra de usuario armhf y ambos conjuntos de bibliotecas correctamente vinculados para cada uno.

Aquí puedes ver a alguien haciéndolo en un tablero diferente:

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

Y ver sus experiencias.

EMSmith
fuente