Portierung von Alpine Linux auf RISC-V

Nach Monaten qualvollen Wartens habe ich kürzlich mein HiFive Unleashed erhalten und es ist unglaublich cool. Für diejenigen, die nicht auf dem neuesten Stand sind, ist HiFive Unleashed das erste RISC-V- Single-Board mit Linux-Unterstützung, das sich an den Verbraucher richtet. Wenn noch nicht klar, ist RISC-V eine offene , kostenlose Befehlssatzarchitektur , und HiFive ist ein offener Prozessor, der sie implementiert. Und hier ist er auf meinem Esstisch:


Das Board ist wirklich cool . In den kommenden Monaten werde ich versuchen, alles Notwendige für den kontinuierlichen Integrationsdienst builds.sr.ht vorzubereiten , über den der Rest des Alpine Linux-Ports automatisiert wird, sowie die Installation aller anderen Betriebssysteme (einschließlich Nicht-Linux) und Benutzerprogramme, die Sie möchten Port zu RISC-V. Ich bin mir ziemlich sicher, dass dies das erste derartige Projekt für RISC-V-Geräte sein wird, das der Öffentlichkeit zugänglich ist.

Es gibt zwei Phasen der Portierung des Betriebssystems auf die neue Architektur: Bootstrap (Bootstrapping) und ... tatsächlich Portierung. Aus Mangel an einem besseren Begriff. Zum Bootstrap benötigen wir einen Cross-Compiler, wir müssen libc portieren und die Grundelemente cross-kompilieren. Bootstrap endet, wenn das System in der Lage ist, sich selbst zu hosten , dh es kann sich selbst kompilieren. Der Portierungsprozess umfasst das Kompilieren aller für Ihr Betriebssystem verfügbaren Pakete. Der Prozess kann zeitaufwändig und im Allgemeinen automatisiert sein.

Der erste Schritt ist ein Cross-Compiler. Die RISC-V-Unterstützung wurde vor einigen Releases in binutils 2.28 und gcc 7.1 veröffentlicht. Darüber können Sie sich keine Sorgen machen. Es reicht aus, beide Compiler mit dem Parameter --target=riscv64-linux-musl zu sammeln. Ein weiterer wichtiger Teil ist die Standard-C-Bibliothek oder libc. Im Gegensatz zum C-Compiler erforderte dieser Schritt einige Anstrengungen von meiner Seite, da Alpine Linux auf musl libc basiert und sein Port für RISC-V noch nicht vollständig ist und nicht im Hauptzweig enthalten ist.

Es gibt jedoch einen Patch zur Unterstützung von RISC-V, der jedoch noch nie in dieser Größenordnung getestet wurde. Dementsprechend bin ich auf mehrere Fehler gestoßen, für die ich mehrere Patches geschrieben habe ( 1 , 2 , 3 ). Eine funktionierende Distribution, die auf dem RISC-V-Port basiert, ist ein überzeugendes Argument für die Reife der portierten Version. Ich bin daher froh, dass ich diese Fehler entdeckt 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ür für die Portierung einer großen Menge an Software auf Ihre Plattform. Der nächste Schritt besteht darin, die erforderlichen Pakete für das Selbsthosting-System zu identifizieren und zu übertragen. Hier in Alpine gibt es ein großartiges Skript , das einen Cross-Compiler vorbereitet und das Basissystem erstellt. Viele (wenn nicht die meisten) dieser Pakete erforderten Korrekturen, Konfigurationen und manuelle Eingriffe - dies ist keine fertige Lösung, sondern ein unglaublich nützliches Werkzeug. Die wichtigsten Pakete in dieser Phase sind native Tools (dh der Compiler kompiliert nicht nur, sondern läuft auch unter RISC-V), der Passwort-Manager selbst und verschiedene andere nützliche Dinge wie tar, patch, openssl und so weiter.

Sobald die erforderlichen Pakete kompiliert wurden und das System sich selbst kompilieren kann, beginnt ein langwieriger Migrationsprozess. Hier ist es normalerweise ratsam, den Cross-Compiler zu verlassen und die native Assembly zu starten, wenn die Hardware schnell genug ist. Dies ist ein Kompromiss, da das RISC-V-System etwas langsamer ist als mein x86_64-Bootcomputer, aber viele Pakete erfordern viele manuelle Konfigurationen und Korrekturen für das Cross-Compilieren. Die dadurch eingesparte Zeit kompensiert die langsamere Assemblierung (obwohl ich von der Geschwindigkeit von HiFive Unleashed sehr beeindruckt bin. Der größte Engpass ist der mmcblk-Treiber, aber sobald die Dateien in den Kernel-Cache gelangen, wird alles sehr schnell und angenehm).

Es gibt Tausende von Paketen. Der nächste Schritt für mich (und alle, die an der Migration arbeiten) besteht darin, den Rest des Prozesses zu automatisieren. Für mich ist der Zwischenschritt die Integration in den Dienst builds.sr.ht, um meine eigene Arbeit zu organisieren und Zyklen anderen an RISC-V interessierten Personen zur Verfügung zu stellen. Nicht alle Pakete werden automatisch portiert - aber viele! Sobald Sie Ihre Programmiersprachen portiert haben - C, Python, Perl, Ruby (das habe ich bereits getan!) Usw. - sind die meisten Open Source-Programme über Architekturen hinweg ziemlich portabel. Eines meiner Hauptziele bei sr.ht ist es, die Verbreitung von tragbarer Software zu fördern!

Wenn einer der 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 wird 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 

Führen Sie /bin/busybox --install und apk fix beim ersten Start aus. Die Arbeit ist noch nicht abgeschlossen, daher ist das Einrichten des Restes eine Übung für den Leser, bis ich den Prozess abgeschlossen und ein normales Installationsskript erstellt habe. Viel Glück



Fazit: Vielen Dank, dass Sie den Mitgliedern der # risv-Community auf Freenode sowie den Debian- und Fedora-Entwicklern geholfen haben, die den Weg weitgehend frei gemacht und Patches für viele Programme veröffentlicht haben! Aber ich hatte die ganze Freude, Mussel zu bewegen, also war die Straße nicht ganz sauber :)

Source: https://habr.com/ru/post/de434382/


All Articles