Nächste: , Vorige: , Nach oben: Top   [Inhalt][Index]


15 Auf eine neue Plattform portieren

Wie oben beschrieben ist die GNU-Distribution eigenständig und diese Eigenständigkeit wird erreicht, indem sie aus vorerstellten „Bootstrap-Binärdateien“ heraus erstellt werden kann (siehe Bootstrapping). Diese Binärdateien unterscheiden sich je nach verwendetem Betriebssystem-Kernel, nach der Prozessorarchitektur und der Anwendungsbinärschnittstelle („Application Binary Interface“, kurz ABI). Um die Distribution also auf eine noch nicht unterstützte Plattform zu portieren, muss man diese Bootstrap-Binärdateien für diese Plattform erstellen und das Modul (gnu packages bootstrap) aktualisieren, damit es sie benutzt.

Zum Glück kann Guix diese Bootstrap-Binärdateien cross-kompilieren. Wenn alles gut geht, und vorausgesetzt, die GNU-Werkzeuge (zusammen werden sie als GNU-„Toolchain“ bezeichnet) unterstützen diese Zielplattform auch, dann kann es völlig ausreichen, dass Sie einen Befehl wie hier ausführen:

guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs

Damit das funktioniert, muss erst die glibc-dynamic-linker-Prozedur in (gnu packages bootstrap) angepasst werden, damit sie den richtigen Dateinamen für den dynamischen Binder von libc auf dieser Plattform liefert; ebenso muss system->linux-architecture in (gnu packages linux) mit den Informationen über die neue Plattform versorgt werden.

Sobald diese erstellt wurden, muss das Modul (gnu packages bootstrap) aktualisiert werden, damit es diese Binärdateien für die Zielplattform benutzt. Das heißt, die Hashes und URLs der Bootstrap-Tarballs für die neue Plattform müssen neben denen für die bisher unterstützten Plattformen aufgeführt werden. Der Bootstrap-Guile-Tarball wird besonders behandelt: Von ihm wird erwartet, dass er lokal verfügbar ist, und gnu/local.mk enthält Regeln, um ihn für die unterstützten Architekturen herunterzuladen; eine Regel muss auch für die neue Plattform hinzugefügt werden.

In der Praxis kann es einige Schwierigkeiten geben. Erstens kann es sein, dass das erweiterte GNU-Tripel, das eine Anwendungsbinärschnittstelle (ABI) festlegt (wie es das eabi-Suffix oben tut) nicht von allen GNU-Werkzeugen erkannt wird. Typischerweise erkennt glibc manche davon, während für GCC eine zusätzliche Befehlszeilenoption --with-abi an configure übergeben werden muss (siehe gcc.scm für Beispiele, wie man das macht). Zweitens könnte es sein, dass manche der notwendige Pakete für diese Plattform nicht erfolgreich erstellt werden können. Zuletzt könnten die generierten Binärdateien aus dem einen oder anderen Grund fehlerhaft sein.


Nächste: , Vorige: , Nach oben: Top   [Inhalt][Index]