Linux Kernel-Module kompilieren

So erstellen Sie Treiber für den Raspberry Pi selbst

3. Kernel-und Compiler-Versionen für Raspberry Pi

Versions-Check: Ermitteln, welche Linux-Kernel-Version auf dem Raspberry Pi installiert ist.
Versions-Check: Ermitteln, welche Linux-Kernel-Version auf dem Raspberry Pi installiert ist.

Der Kernel-Quellcode und die Compiler-Version müssen exakt zu dem Kernel passen, der auf Ihrem Gerät läuft – sonst lässt sich das Modul später nicht laden. Informationen zum Kernel erhalten Sie auf jedem Linux-System über die folgenden Terminal-Kommandos:

uname -a cat /proc/version gcc --version

Die Ausgabe bei einem Raspberry Pi sehen Sie in der Abbildung. Die Kernel-Version ist „3.18.11+“, und im Gerät steckt eine ARMv6l-CPU. Ein Raspberry PI 2 würde hier „3.18.11-v7+“ und „armv7l“ melden. In der Ausgabe von „cat /proc/version“ sehen Sie, dass der Kernel mit dem Compiler GCC Version 4.8.3 20140303 und crosstool-NG linaro-1.13.1+bzr2650 erstellt wurde. Die Version des installierten Compilers gcc 4.6.3 passt allerdings nicht zum Kernel (-> Punkt 7).

Die Angabe „crosstool-NG“ ist eine Besonderheit bei Raspbian, denn der Kernel wird nicht auf einem Raspbian-System kompiliert, sondern unter einem anderen Linux. Der Raspberry Pi ist nämlich zu langsam für so aufwendige Projekte wie den Linux-Kernel. Deshalb kommt ein Crosscompiler zu Einsatz (-> Punkt 4). Damit ist es möglich, Programme auf einem leistungsfähigeren PC mit x86_64-CPU (Intel/AMD) für ein Gerät mit ARM-Prozessor zu erstellen. Grundsätzlich ist es aber möglich, Kernel-Module auch unter Raspbian zu erstellen. Zumindest beim neuen Raspberry Pi 2 reicht die Leistung gerade mal so aus.

4. Entwicklungsumgebung unter Linux einrichten

Damit sich Kernel-Module unter Ubuntu erstellen lassen, sind Zusatz-Tools erforderlich.
Damit sich Kernel-Module unter Ubuntu erstellen lassen, sind Zusatz-Tools erforderlich.

Für ein neues Kernel-Modul benötigen Sie den Quellcode des Linux-Kernels, den Quellcode des gewünschten Moduls und Werkzeuge für die Kernel-beziehungsweise Software-Entwicklung. Wir haben als Entwicklungssystem Ubuntu 14.04 LTS verwendet. Im Prinzip geht auch jedes andere Linux. Sie müssen dann aber die Bezeichnungen der nötigen Pakete selbst herausfinden. Wenn Sie Ubuntu nicht auf Ihrem PC installiert haben, ist auch die Entwicklung in einer virtuellen Maschine möglich. Um Ihnen die Arbeit zu vereinfachen, haben wir alle nötigen Befehle im Script „raspi_crosstools.sh“ versammelt. Im Folgenden erläutern wir die einzelnen Schritte, die das Script ausführt, damit Sie bei Bedarf selbst Anpassungen vornehmen können.

Entpacken Sie die ZIP-Datei unter Ubuntu direkt in Ihr Home-Verzeichnis, und machen Sie das Shell-Script mit

chmod 755 raspi_crosstools.sh

ausführbar. Stellen Sie sicher, dass Ihr Raspberry Pi über SSH erreichbar ist. Dazu tippen Sie im Terminal-Fenster folgende Zeile ein:

ssh pi@[IP-Adresse]

„[IP-Adresse]“ ersetzen Sie durch die tatsächliche IP oder den Host-Namen des Raspberry Pi. Geben Sie das Kennwort ein, und beenden Sie die Verbindung wieder mitexit. Öffnen Sie „raspi_crosstools.sh“ in einem Editor. Tragen Sie unter „Konfiguration“ hinter die kommentierten Variablen Benutzernamen, Kennwort und IP-Adresse für den Raspberry Pi ein. Speichern Sie die Datei und starten Sie das Script im Terminal-Fenster mit

./raspi_crosstools.sh

Das Script installiert – sofern nötig –zuerst Pakete über die Zeilen

sudo apt-get update sudo apt-get install git build-es sential lftp

nach. Dann erstellt es das Arbeitsverzeichnis „raspi_cross“ in Ihrem Home-Verzeichnis.