Migrieren Sie Alpine Linux zu RISC-V

Ursprünglicher Autor: Drew DeVault
  • Übersetzung
Nach einigen quälenden Monaten des Wartens erhielt ich kürzlich mein HiFive Unleashed , und das ist unglaublich cool. Für diejenigen, die es nicht wissen, ist HiFive Unleashed das erste konsumentenorientierte Einzelspieler- RISC-V mit Linux-Unterstützung. Wenn es noch nicht klar ist, ist RISC-V eine offene , freie Befehlssatzarchitektur , und HiFive ist ein offener Prozessor, der es implementiert. Und hier ist er an meinem Tisch:


Das Board ist wirklich cool . In den kommenden Monaten werde ich versuchen, alles Notwendige für den Continuous Integration Service builds.sr.ht vorzubereiten , durch den der Rest des Alpine Linux-Transfers automatisiert wird, sowie die Installation anderer Betriebssysteme (einschließlich Nicht-Linux) und Benutzerprogramme, die Sie wünschen Port zu RISC-V. Ich bin mir ziemlich sicher, dass dies das erste derartige Projekt auf RISC-V-Geräten sein wird, das der Öffentlichkeit zugänglich ist.

Das Portieren des Betriebssystems auf eine neue Architektur erfolgt in zwei Schritten: Boot (Bootstrapping) und ... eigentlich Portieren. Mangels eines besseren Begriffs. Für das erstmalige Laden benötigen wir einen Cross-Compiler, wir müssen libc portieren und die grundlegenden Elemente überkompilieren. Das Booten ist abgeschlossen, wenn das System sich selbst hosten kann , das heißt, es kann sich selbst kompilieren. Beim „Portierungsprozess“ werden alle für Ihr Betriebssystem verfügbaren Pakete zusammengestellt. Der Prozess kann viel Zeit in Anspruch nehmen und ist im Allgemeinen automatisiert.

Erster Cross-Compiler. Die RISC-V-Unterstützung erschien vor einigen Releases in binutils 2.28 und gcc 7.1. Sie können sich keine Sorgen darüber machen. Es reicht aus, beide Compiler mit dem Parameter zu bauen--target=riscv64-linux-musl. Ein weiterer wichtiger Teil ist die Standard-C- oder Libc-Bibliothek. Im Gegensatz zum C-Compiler erforderte dieser Schritt einen gewissen Aufwand, da Alpine Linux auf Musl libc basiert und der Port für RISC-V noch nicht vollständig ist und nicht in die Hauptlinie aufgenommen wird.

Es gibt jedoch einen Patch , der RISC-V unterstützt, obwohl er noch nie in einem solchen Maßstab getestet wurde. Dementsprechend bin ich auf einige Fehler gestoßen, für die ich mehrere Patches geschrieben habe ( 1 , 2 , 3 ). Eine funktionierende Distribution auf Basis des RISC-V-Ports ist ein überzeugendes Argument für die Reife der portierten Version. Daher bin ich froh, dass ich diese Fehler gefunden habe. Bis zu diesem Zeitpunkt mussten Sie den Port und Ihre Patches manuell zum Alpine Linux Musl-Paket hinzufügen.

Der C-Compiler und die libc-Implementierung öffnen die Türen für die Übertragung einer großen Menge an Software auf Ihre Plattform. Im nächsten Schritt werden die für das Self-Hosting-System erforderlichen Pakete identifiziert und übertragen. Hier in Alpine gibt es ein hervorragendes Skript , das den Cross-Compiler vorbereitet und das Basissystem aufbaut. Viele (wenn nicht die meisten) dieser Pakete erforderten Korrekturen, Anpassungen und manuelle Eingriffe - dies ist keine vollständige Lösung, sondern ein unglaublich nützliches Werkzeug. Die wichtigsten Pakete in dieser Phase sind native Tools (dh der Compiler kompiliert nicht nur selbst, sondern arbeitet auch selbst unter RISC-V), der Passwortmanager selbst und verschiedene andere nützliche Dinge wie tar, patch, openssl usw.

Sobald die benötigten Pakete zusammengestellt sind und das System sich selbst kompilieren kann, beginnt der lange Übertragungsprozess. Hier ist es normalerweise ratsam, den Cross-Compiler zu verlassen und mit dem nativen Build fortzufahren, wenn die Hardware schnell genug ist. Dies ist ein Kompromiss, da das RISC-V-System etwas langsamer ist als mein x86_64-Startcomputer, aber viele Pakete erfordern viele manuelle Konfigurationen und Korrekturen für das Cross-Compilieren. Die Zeitersparnis spart den langsameren Build (obwohl ich von HiFive Unleashed-Geschwindigkeit eigentlich sehr beeindruckt bin. Der größte Engpass ist der mmcblk-Treiber, aber sobald die Dateien in den Kernel-Cache gelangen, wird alles schnell und angenehm).

Es gibt Tausende von Paketen, und der nächste Schritt für mich (und alle, die an der Übertragung arbeiten) ist die Automatisierung des restlichen Prozesses. Ein Zwischenschritt ist für mich die Integration mit dem Dienst builds.sr.ht, um meine eigene Arbeit zu organisieren und die Zyklen für andere an RISC-V interessierte Personen verfügbar zu machen. Nicht alle Pakete werden automatisch portiert - viele jedoch! Sobald Sie Programmiersprachen portieren - C, Python, Perl, Ruby (ich habe es bereits getan!) Usw. - sind die meisten Open Source-Programme auf verschiedenen Architekturen ziemlich portabel. Eines meiner Hauptziele in sr.ht ist es, die Verbreitung tragbarer Software zu fördern!

Wenn ein Leser über eine eigene RISC-V-Hardware verfügt oder diese mit qemu ausprobieren möchte, finden Sie hier das Alpine Linux-Repository für RISC-V. So etwas würde es in / mnt installieren:

apk add \
    -X https://mirror.sr.ht/alpine/main/ \
    --allow-untrusted \
    --arch=riscv64 \
    --root=/mnt \
    alpine-base alpine-sdk vim chrony

Run /bin/busybox --installund apk fixbeim ersten Booten. Die Arbeit ist noch nicht abgeschlossen, also ist es eine Übung für den Leser, den Rest einzurichten, bis ich den Vorgang abschließe und das normale Installationsskript abschließe. Viel Glück!



Fazit: Vielen Dank, dass Sie den Mitgliedern der #riscv-Community auf Freenode und den Entwicklern von Debian und Fedora geholfen haben, die weitgehend den Weg frei gemacht haben und Patches für viele Programme veröffentlicht haben! Aber ich hatte die ganze Freude am Tragen von Musl, daher war die Straße nicht völlig klar :)

Jetzt auch beliebt: