Nächste: Mitwirken, Vorige: Bootstrapping, Nach oben: Top [Inhalt][Index]
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: Mitwirken, Vorige: Bootstrapping, Nach oben: Top [Inhalt][Index]