Aus Raspberry Pi Geek 05/2014

RasPi-Kernel in der VM crosskompilieren

© Anastasy Yarmolovich, 123RF

Backe, backe Kernel

Bernhard Bablok

Wer mit seinem RasPi Dinge anstellen möchte, für die dieser eigentlich nicht vorgesehen ist, kommt häufig nicht umhin, dafür einen eigenen Kernel zu backen. Wir zeigen, wie es geht.

README

Aktuelle Distributionen für den Raspberry Pi enthalten Komplettsysteme, die kaum Wünsche offenlassen. Bei besonderer Hardware oder Bedürfnissen außerhalb des Mainstreams heißt es aber selbst Hand anlegen. Wie Sie alles, von Anwendungsprogrammen bis zum Kernel, selbst kompilieren, zeigt dieser Artikel.

Die zum Entwickeln eigener Programme notwendigen Komponenten, insbesondere der Compiler, stehen auch unter Raspbian von Haus aus zur Verfügung. Kleinere Programme, etwa Steuersoftware für die GPIO-Pins, entwickeln und kompilieren Sie damit auch problemlos direkt auf dem RasPi. Anders sieht es bei großen Programmen aus, zu denen auch der Kernel zählt: Hier reichen die Ressourcen des RasPi einfach nicht aus, um das Kompilieren in einem vernünftigen Zeitrahmen abzuwickeln. So dauert das Übersetzen eines Kernels darauf mehr als zwölf Stunden. Das ließe sich mit einem Lauf über Nacht gerade noch abwickeln, doch für normale Software-Entwicklung mit einem iterativen Vorgehen kommt das nicht infrage.

Die Lösung des Problems heißt Cross-Compile: Ein Cross-Compiler erzeugt Code für eine andere Hard- oder Software-Plattform als jene, auf der er selbst läuft. So lassen sich beispielsweise auch auf Linux-Systemen Programme für Windows erzeugen – der Befehlssatz des Prozessors ändert sich hier ja nicht. Da aber der RasPi eine ganz andere Hardware-Architektur verwendet als Intels x86-Prozessoren, bedeutet das mehr Aufwand.

Die folgenden Abschnitte beschreiben die besonderen Voraussetzungen und den Aufbau einer geeigneten Entwicklungsumgebung für den Raspberry Pi. Da es sich um ein recht komplexes Thema handelt, finden Sie auf der Heft-DVD eine vorbereitete Umgebung als Virtualbox-Image. Nähere Infos dazu liefert der Kasten “Entwicklungsumgebung in der Box”. Auch Windows-Anwender kommen so in den Genuss eines lauffähigen Systems.

Entwicklungsumgebung in der Box

Die auf der Heft-DVD als Virtualbox-Image mitgelieferte Entwicklungsumgebung basiert auf einer mit Standardvorgaben installierten Netinstall-CD von Debian “Wheezy”. Nach dem Einrichten von Virtualbox importieren Sie das Image wheezy-cross-compile.ova von der DVD über den Menüpunkt Datei | Appliance importieren ….

In den Grundeinstellungen der virtuellen Maschine müssen Sie die Netzwerkanbindung an die lokalen Gegebenheiten anpassen. Das System verwendet in der vorliegenden Konfiguration WLAN als Netzzugang. Benutzen Sie ein kabelgebundenes System, dann stellen Sie den Parameter auf eth um (Abbildung 1).

Der Router in Ihrem LAN weist dem System eine IP-Adresse zu, die Sie mit sudo ifconfig im virtuellen System abfragen. Mit dieser Adresse kommen Sie auch von außen via SSH oder Putty auf den Rechner. Genauso greifen Sie bei Bedarf aus der VM heraus über IP-Adressen auf andere Rechner in Ihrem Netz zu, insbesondere auch auf den Raspberry Pi. Um dessen IP nicht immer wieder eintippen zu müssen, hinterlegen Sie die Namenszuordnung der IP-Adressen am besten auch in der Datei /etc/hosts.

Die beiden auf dem Image vorinstallierten Nutzer pi und root verwenden jeweils das Passwort raspberry. Im Home-Verzeichnis von pi (/home/pi) finden Sie im Unterverzeichnis src/ die vorbereiteten Tools und Kernel-Quellen, deren Verwenden der Artikel beschreibt. Bevorzugen Sie eine grafische Oberfläche, müssen Sie diese manuell nachinstallieren. So richtet der Befehl sudo apt-get install xorg openbox eine minimale GUI mit Openbox als Window-Manager ein.

Abbildung 1: Damit die virtuelle Maschine mit dem Netz kommuniziert, gilt es, in Virtualbox die korrekte Netzwerkschnittstelle einzustellen.

Abbildung 1: Damit die virtuelle Maschine mit dem Netz kommuniziert, gilt es, in Virtualbox die korrekte Netzwerkschnittstelle einzustellen.

Architektur-Wirrwarr

Der RasPi verwendet einen auf der ARM-Architektur basierenden Chip. Im Gegensatz zu den Prozessoren auf Desktops und Laptops, bei denen die Intel/AMD-64-Bit-Monokultur vorherrscht, gibt es nicht “die eine” ARM-Architektur, sondern verschiedene Varianten, die zusätzlich auch noch unterschiedlich in Hardware gegossen sind: die ARM-Prozessorfamilien. Einen guten Überblick geben der Wikipedia-Artikel zu diesem Thema [1] und seine weiterführenden Links – die englische Ausgabe fällt etwas detailreicher aus.

Beim Raspberry-Pi-Prozessor handelt es sich um die schon in die Jahre gekommene 32-Bit-Variante ARMv6 mit hardwaregestützten Fließkommaoperationen. Es gilt also, eine Cross-Compile-Umgebung aufzubauen, die genau diese Architektur unterstützt und darüber hinaus auch noch alle Linux-Spezifika berücksichtigt, wie Aufrufkonventionen oder binäre Header-Formate.

Die verbreiteten Distributionen wie OpenSuse, Debian oder Ubuntu bieten in ihren Repositories (allerdings nicht immer in den Hauptzweigen) verschiedene Cross-Compile-Umgebungen an, sogenannte Toolchains. Allerdings lässt sich aufgrund des oben beschriebenen Wirrwarrs nicht so einfach ersehen, welchen Code sie genau erzeugen. Hinzu kommt, dass einige der Cross-Compiler selbst nur in der 32-Bit-Version vorliegen: Auf einem 64-Bit-Desktop-System bedeutet das die Notwendigkeit zum Nachinstallieren weiterer Bibliotheken. Viele der in Blogeinträgen verfügbaren Anleitungen funktionieren deshalb nur mit einer speziellen Distributionsversion – und auch nur dann, wenn diese genaue Voraussetzungen erfüllt.

Letztlich stellte es sich im Test als schwierig bis unmöglich heraus, auf den gängigen Umgebungen einfach mit Bordmitteln ein geeignetes System aufzusetzen. Doch zum Glück gibt es Abhilfe: Auf Github steht eine fast lauffähige Umgebung zum Download bereit.

Installation via Github

Bei Git handelt es sich um ein weitverbreitetes Versionsverwaltungssystem, das praktisch alle Standard-Repositories vorhalten. Um es zu verwenden, installieren Sie zuerst das Paket git auf dem System. Dann holen die Kommandos aus Listing 1 die Cross-Compiler-Programme in verschiedenen Versionen auf die Platte. Die aufgeführten Befehle setzen voraus, dass Sie sie im Heimatverzeichnis ausführen, in der virtuellen Maschine also in /home/pi/.

Listing 1

 

$ mkdir -p src
$ cd src
$ git init
$ git clone git://github.com/raspberrypi/tools.git

Ungefähr 1,1 GByte später liegen die Tools komplett unter src/tools/. Auf 64-Bit-Rechnern interessiert uns die Version im Verzeichnis src/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64. Das hf im Namen deutet auf den Support der Hardfloat-Architektur hin, also der Unterstützung von Fließkomma-Arithmetik in Hardware. Das Suffix x64 zeigt an, dass die Programme (nicht der erzeugte Code) auf normalen 64-Bit-Linuxen laufen.

Eine eigentliche Installation der Tools im System wäre zwar möglich, ist aber unnötig. Um den länglichen Pfad zum Cross-Compiler nicht immer eintippen zu müssen, speichern Sie ihn in einer Umgebungsvariable (Listing 2). Auf dem virtuellen System steht diese Zeile in der Datei /home/pi/.ccprefix, die die /home/pi/.bashrc einbindet.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben