Linux Kernel-Module kompilieren

So erstellen Sie Treiber für den Raspberry Pi selbst

5. Quellcode herunterladen und kompilieren

Infos zum installierten Kernel stehen in der Datei „changelog.Debian.gz“.
Infos zum installierten Kernel stehen in der Datei „changelog.Debian.gz“.

Der Quellcode des Raspberry-Kernels ist unter https://github.com/raspberrypi/linux zu finden. Allerdings befindet sich dieser in ständiger Entwicklung: Sie können die aktuellen Dateien nicht einfach verwenden, weil der installierte Kernel älter ist als die Entwickler-Version. Welcher Kernel zum Einsatz kommt, steht bei Raspbian in der Datei „/usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz“ hinter „firmware as of“. Dabei handelt es sich um eine Prüfsumme („Hash“). Mit dieser lässt sich dann die Download-Adresse für den Kernel-Quellcode bestimmen. Das Script „raspi_crosstools.sh“ lädt dazu in der Funktion „get_files_from_raspi()“ die Datei von Ihrem Raspberry Pi und speichert das Ergebnis in der Variablen „KERNEL_HASH“. Außerdem holt es sich die Konfigurationsdatei für den Kernel aus „/proc/config.gz“ und ermittelt aus dieser, ob der Kernel für das Modell Pi oder Pi 2 erstellt wurde. Diese Information ist für die korrekte Download-Adresse der Datei „Module.symvers“ erforderlich, ohne die sich Kernel-Module nicht bauen lassen.

Im nächsten Schritt lädt das Script den Kernel-Quellcode, den Cross-Compiler und den Treiber-Quellcode über das Tool git herunter. Das geschieht per „git checkout“ beziehungsweise „git clone“. Nach diesen Vorbereitungen setzt das Script einige Umgebungsvariablen, damit sich der Cross-Compiler nutzen lässt:

export CCPREFIX=$WORKDIR/tools/arm-bcm2708/gcc-linaro-arm-li nux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- export ARCH=arm export CROSS_COMPILE=${CCPREFIX}

Für die Vorbereitung des Raspbian-Kernels genügen diese drei Zeilen:

make oldconfig make prepare make scripts

Danach kompiliert das Script den Treiber aus dem Verzeichnis „mt7610u_wifi_sta_v3002_dpo_ 20130916/os/linux/“. Der Quellcode enthält gegenüber dem Original-Treiber einige Anpassungen für den Raspberry Pi und neuere Kernel. Wenn Sie einen anderen Treiber erstellen möchten, passen Sie das Script an. Sorgen Sie dafür, dass die Angaben im Block „Treiber compilieren“ auf das gewünschte Verzeichnis verweisen.


6. Neuen Treiber auf dem Raspberry Pi einrichten

Im letzten Schritt kopiert das Script „raspi_crosstools.sh“ in der Unterroutine „put_file_to_raspi()“ die Treiberdatei „mt7650u_sta.ko“ per sftp nach „/home/pi“ auf den Raspberry. Hier finden Sie jetzt außerdem das Script „install_driver.sh“, das Sie mit den folgenden zwei Zeilen ausführbar machen und starten:

chmod 755 install_driver.sh sudo ./install_driver.sh

Das Script kopiert die Treiberdatei beim Raspberry Pi 2 nach „/lib/modules/3.18.11-v7+“ sowie die Konfigurationsdatei nach „/etc/Wireless/RT2870STA/RT2870STA.dat“. Darin sind einige Einstellungen enthalten, die die Arbeitsweise des WLAN-Adapters beeinflussen. In der Regel müssen Sie hier nichts ändern ( Informationen zu möglichen Optionen).Bei Bedarf verwenden Sie das Script „un-install_driver.sh“ für die Deinstallation.

Abschließend richten Sie das WLAN ein wie im -> Kasten „Raspbian: WLAN konfigurieren“ beschrieben.