Den Hostnamen raspi sowie die Kernel-Version passen Sie entsprechend den lokalen Gegebenheiten an. Wichtig im zweiten Befehl (Zeile 6) ist der Schrägstrich am Ende von /tmp/modules/. Die neuen Module kopiert Rsync dann ins Verzeichnis /lib/modules/3.10.37+.
Nach der Installation ändern Sie als Root die Datei /boot/config.txt, hier fügen Sie die Zeile kernel=kernel_3.10.37+.img ein beziehungsweise ändern eine schon vorhandene. Vor dem Neustart sollten Sie sich mittels des Kommandos uname -a noch vergewissern, welche Kernel-Version läuft.
Nach einem Neustart und einem Login prüfen Sie mit den Kommandos uname -a und vcgencmd measure_temp, ob der neue Kernel tatsächlich läuft und auch auf wichtige Parameter zugreift (Abbildung 3). Geht wider Erwarten etwas schief, stellen Sie den Kernel-Parameter in der /boot/config.txt auf den alten Kernel zurück und booten neu. Ein möglicher Grund für ein Scheitern wäre, dass Sie bisher einen sehr alten Kernel mit einer alten Firmware-Version nutzen; in diesem Fall bringen Sie das System vorher auf den neuesten Stand.

Abbildung 3: Die Ausgabe von »uname -a« zeigt an, ob der RasPi den neuen Kernel 3.12.20 erfolgreich bootet.
Kernel für Qemu
Wie in der letzten Ausgabe von Raspberry Pi Geek beschrieben [2], funktioniert Raspbian mit einem besonderen Kernel auch im Emulator Qemu. Allerdings läuft der im Web verfügbare Kernel mit der Version von Raspbian immer weiter auseinander. Ein eigener, angepasster Kernel-Build liegt also nahe.
Der Ablauf unterscheidet sich nur unwesentlich von der vorhergehenden Beschreibung. Eine Änderung betrifft den Kernel-Code: Er benötigt einen sogenannten Patch, der einige Modifikationen an den Dateien vornimmt. Das liegt daran, dass die Emulationsschicht gewisse Dinge benötigt, die der Code des Raspbian-Kernels nicht enthält. Die zweite Änderung betrifft die Konfiguration des Kernels; eine andere Hardware erfordert andere Konfigurationsparameter.
Sie müssen also außer den Kernel-Quellen noch den Patch herunterladen, einspielen und anschließend die Konfiguration anpassen. Zum Glück gibt es ein Skript [3], das alle Schritte automatisiert. Eine für diesen Artikel geringfügig angepasste Version finden Sie auf der Heft-DVD. Sie geht zum Beispiel davon aus, dass der Cross-Compiler, wie hier beschrieben, unterhalb des Home-Verzeichnisses des Benutzers liegt. Außerdem lädt sie die Kernel-Quellen nicht mehr erneut herunter, wenn diese sich schon auf der Platte befinden, sondern erzeugt eine lokale Kopie.
Programme kompilieren
Für die typischen RasPi-Distributionen, allen voran Raspbian, stehen sehr viele vorkompilierte Pakete in den Repositories bereit. Diese genügen für den Hausgebrauch, der Griff zum Cross-Compiler ist also unnötig. Exotischere Pakete müssen Sie aber oft aus den Quellen selbst kompilieren.
Wie das im Einzelnen funktioniert, hängt vom Paketbauer ab: Hat er sein Paket schon für den Betrieb auf mehreren Plattformen ausgelegt, stehen die Chancen gut. Weit verbreitet ist dabei unter Linux das Autoconf/Automake-System. Normalerweise funktioniert hier der Dreischritt (Listing 9).
Listing 9
$ ./configure $ ./make $ sudo make install
Der erste Schritt ruft das mitgelieferte Konfigurationsskript auf, das System und Makefiles vorbereitet. Für einen Cross-Compile benötigt das Tool im ersten Schritt aber noch Zusatzparameter, denn die Analyse des aktuellen Systems hilft ja nicht weiter. Die Parameter --build=... und --host=... steuern das Verhalten: Der erste liefert Configure die Information, wo der Build läuft, der zweite, wo das Programm laufen soll. Analog dazu rufen Sie beim letzten Schritt Make zusätzlich mit DESTDIR=... auf, denn die erzeugten Dateien sollen ja nicht auf dem aktuellen System landen.
Was zunächst einfach klingt, erweist sich in der Praxis als deutlich komplizierter. Im Gegensatz zum Kernel-Compile genügt beim Parameter --host nicht ein Präfix zum Compiler, sondern dieser benötigt ein Triplet in der Form arm-linux-gnueabihf. Damit Configure den Compiler dann auch findet, müssen Sie ihn vorher in das Verzeichnis /usr/local/bin installieren.
Weitere Problemquellen stellen Bibliotheken dar. Auch diese müssen entsprechend der Zielplattform auf dem Build-Rechner vorliegen. Bei größeren Anwendungen führt das zu immer umfangreicheren Cross-Compiles. Entsprechend benötigen Sie zum Einrichten viel Zeit und Geduld.
Fazit
Das Einrichten einer Cross-Compile-Umgebung für den Raspberry Pi ist kein Hexenwerk. Für den Kernel-Bau und kleinere Projekte funktioniert es auch ohne Probleme. Exotischere Programme benötigen mehr Aufwand – insbesondere, wenn der Paket-Maintainer den Raspberry Pi noch nicht als Zielplattform vorgesehen hat. Wer nur hin und wieder ein Paket kompiliert, wirft dann doch vielleicht den Build über Nacht auf dem RasPi selbst an.





