Ist es möglich, Raspberry Pi 3 mit einem 64-Bit-Kernel und 32-Bit-Benutzerbereich auszuführen?

8

Ich habe gerade einen Raspberry Pi 3 in die Hände bekommen und möchte damit experimentieren, insbesondere mit dem 64-Bit-Befehlssatz.

Ich bin mir der Vor- und Nachteile des 32-Bit-Befehlssatzes gegenüber dem 64-Bit-Befehlssatz bewusst. Halten Sie sich daher bitte an die ursprüngliche Frage: Ist es möglich, einen 64-Bit-Kernel unter Verwendung der aktuellen 32-Bit-User-Space-Anwendungen auszuführen? ?

Es reicht aus, den Kernel mit einem 64-Bit-Compiler zu kompilieren und das Image auf RasPi hochzuladen, oder sind andere Schritte erforderlich, die ich beachten sollte? Könnten Sie mir einen umfassenden Überblick darüber geben, was ich als Roadmap betrachten soll? Wie Module / Treiber, die kaputt gehen könnten / werden, wenn ich den 64-Bit-Kernel installiere. Muss ich alles neu kompilieren?

Surfen im Internet Ich weiß, dass es für einige andere Geräteklassen möglich ist und dass das Ausführen dieser "Hybrid" -Konfiguration normalerweise die Paketmanager beschädigen würde, aber ich bin im Moment nicht besorgt über die Verwaltbarkeit. Selbst wenn es Paketmanager kaputt macht und es eine Hölle ist, es aufrechtzuerhalten, würde ich gerne verstehen, wie es gemacht wird.

Bitte beachten Sie, dass ich noch lerne, wie man den Kernel kompiliert, aber ich habe noch lange Erfahrung in der Entwicklung von C / C ++ - Anwendungen. Dies ist mein Lieblingsprojekt, um ein tiefes Verständnis der Linux-Architektur und der Kernel-Interna zu erlangen.

Daniela Petruzalek
quelle
Das Dragonboard 410c verwendet das gleiche Prozessorarm64-Bit und verfügt über ein von Linaro angepasstes Ubuntu.

Antworten:

3

Ist es möglich, Raspberry Pi 3 mit einem 64-Bit-Kernel und 32-Bit-Benutzerbereich auszuführen?

Ja. Einige vorgefertigte Bilder haben Folgendes bereit:

Normalerweise würde das Ausführen dieser "Hybrid" -Konfiguration die Paketmanager beschädigen, aber ich bin im Moment nicht besorgt über die Verwaltbarkeit. Selbst wenn es Paketmanager kaputt macht und es eine Hölle ist, es zu warten

Es ist nicht praktisch, Multiarch mit Raspbian zu verwenden, da es keine 64-Bit-Upstream-Pakete enthält und der nächste 64-Bit-Verwandte (Debian arm64) inkompatible Paketversionen hat. Um 64-Bit-Programme unter Raspbian auszuführen, können Sie statische Binärdateien, Container (LXC, systemd-nspawn) oder chroot [1] verwenden . Eine solche Isolation vermeidet typische Paketkonflikte, die dem Mutiarchen innewohnen.

Sie müssen nichts neu kompilieren, da Binärdateien für alle oben genannten (Raspbian 32-Bit-Userland-, 64-Bit-Kernel-, Debian arm64-Userland-Pakete) leicht verfügbar sind.

Wie Module / Treiber, die kaputt gehen könnten / werden, wenn ich den 64-Bit-Kernel installiere.

Zum Zeitpunkt des Schreibens der SoC-Kamera ist bekannt, dass die beschleunigte Videodecodierung mit MMAL und die Hochgeschwindigkeits-USB-Unterstützung (über FIQ) unter Raspberry Pi 64-Bit-Kerneln fehlerhaft sind.

[1] Anweisungen zum Erstellen einer solchen Chroot finden Sie unter 64-Bit-Betriebssystem auf Raspberry Pi 4 .

jdonald
quelle
2

Sicher ist es möglich. 64-Bit-Betriebssysteme tun dies ständig *. Dies passiert, wenn Sie ein 64-Bit-Betriebssystem verwenden und eine 32-Bit-App (auch bekannt als 32-Bit-User-Space-Anwendung) öffnen.

Manchmal kann es jedoch Probleme mit Bibliotheken / Abhängigkeiten geben. Ich habe einmal einen Fehler aufgetreten ist auf einem PC , etwas über wrong ELF class. Gelöst durch Installation der entsprechenden 32-Bit-Bibliothek ia32-libs.

Ich bin mir nicht ganz sicher, wie sich dies auf einem ARM-Computer verhalten würde, da es (noch) keinen offiziellen 64-Bit-Kernel für den Pi gibt, mit dem ich spielen kann.

Außerdem kompiliert man den Kernel nicht einfach mit einem 64-Bit-Compiler, um ihn auf den Pi hochzuladen. Wenn es so einfach wäre, würden wir den Pi 3 bereits mit einem 64-Bit-Kernel ausführen.

PNDA
quelle
+1 Windows macht dies bei der Aufteilung der Programmdateien sehr deutlich. 64-Bit-Anwendungen werden in C:\Program Filesund 32-Bit-Anwendungen in gespeichert C:\Program Files (x86).
Jacobm001
1
@ Jacobm001 Es gibt einen subtileren Unterschied zu Windows. Unter Linux benötigten Sie lediglich die entsprechenden 32-Bit-Bibliotheken. Für Windows sind technisch zwei Windows-Versionen auf Ihrem PC installiert: die 32-Bit-Version, in der gespeichert ist SysWOW64, und die 64-Bit -Version, in der gespeichert ist system32. Windows identifiziert die ausführbare Datei und macht sie so, dass die 32-Bit-App SysWOW64als sieht system32. Gleiches passiert mit Program Filesund der Registrierung. 32-Bit-Apps werden C:\Program Files (x86)als einfach angesehen, C:\Program Filesaber alle Änderungen werden vorgenommen C:\Program Files (x86).
PNDA
1
@ Jacobm001 Ich mache Spaß auf Partys.
PNDA
2

Sie benötigen beide Bibliotheksgruppen und beide Architekturen, die für die richtigen Bibliotheken kompiliert wurden, also 2 Build-Umgebungen. Suchen Sie nach Multi Arch und Ihrem bevorzugten BSSE, um Zeiger zu erhalten. Mögen

https://wiki.debian.org/MultiarchCrossToolchainBuild

Sie müssten also so etwas tun, aber im rasbianischen Raum. Erstellen Sie also einen arm64-Kernel und ein armhf-Benutzerland und beide Bibliotheksgruppen, die für jede ordnungsgemäß verknüpft sind.

Hier können Sie jemanden sehen, der es auf einem anderen Board macht:

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

Und sehen Sie ihre Erfahrungen.

EMSmith
quelle