Aus Raspberry Pi Geek 06/2021

Treiber als Kernel-Module kompilieren (Seite 2)

Listing 2

Kbuild-Datei für das Modul

obj-m := rtc-rx8010.o

Danach bauen und installieren Sie das Modul mit den Befehlen aus Listing 3, was selbst auf einem Pi Zero sehr schnell geht. Die zweite Zeile baut die Moduldatei rtc-tx8010.ko aus den Quellen. Die dritte Zeile installiert die Datei dann in den Modulbaum, auf einem System mit Kernel 5.4.79+ also nach /lib/modules/5.4.79+/extra/rtc-rx8010.ko. Nach der Installation bringt das depmod-Kommando aus der vierten Zeile noch die Modulabhängigkeiten auf den aktuellen Stand. Die letzte Zeile lädt das Modul, sodass Sie das System nicht neu starten müssen.

Listing 3

Modul bauen und installieren

$ cd $HOME/src/epson-rtc
$ make -C /lib/modules/$(uname -r)/build M=$PWD
$ sudo make -C /lib/modules/$(uname -r)/build M=$PWD modules_install
$ sudo depmod -a
$ sudo modprobe rtc-rx8010

Die ganze “Magie”, die aus einer einzeiligen Kbuild-Datei letztlich ein Kernel-Modul macht, steckt im Build-System des Kernels. Das erste Beispiel haben wir bewusst sehr einfach gewählt, aber auch bei einem komplizierteren Setup ist die Kbuild-Datei nicht viel komplexer. Beispiele und Hinweise kommen von den Kernel-Machern selbst in der Kernel-Dokumentation [3]. Außerdem dürfte es sehr selten vorkommen, dass ein Hardware-Hersteller zwar den Quellcode bereitstellt, aber keine passende Build-Datei.

In-Tree-Builds

Module, die mit dem hier beschriebenen Verfahren gebaut wurden, besitzen einen Nachteil. Nach dem Laden erscheint eine Meldung im Systemlog, die den Kernel als tainted kennzeichnet, was wörtlich übersetzt beschmutzt oder verdorben heißt. Damit schützen sich die Kernel-Maintainer vor Fehler-Reports: Sie untersuchen nur Fehler, die sich mit den offiziellen Kerneln reproduzieren lassen. Die praktischen Auswirkungen für Endbenutzer halten sich jedoch in engen Grenzen, denn die Mühe, einen offiziellen Bug-Report einzureichen, nehmen sowieso eher die Macher der großen Distributionen auf sich.

Vor diesem Hintergrund verzichtet auch der aktuelle Artikel auf eine Beschreibung des In-Tree-Builds, also den eines kompletten Kernels samt Modul. Der Aufwand dafür und die Laufzeit, selbst wenn diese deutlich kürzer ist als für einen kompletten Neubau, stehen in keinem Verhältnis zum Nutzen. Listing 4 erklärt Interessierten beispielhaft das Vorgehen.

Listing 4

In-Tree-Build eines Moduls

### Vorbereitung
$ sudo apt-get -y install flex bison libssl-dev libncurses-dev
$ mkdir $HOME/src
$ cd $HOME/src
### Download
$ git clone --depth=1 --branch 5.4.y https://github.com/raspberrypi/linux
$ cd linux
### Aktuelle Kernel-Konfiguration extrahieren und anpassen
$ sudo modprobe configs
$ zcat /proc/config.gz > .config
$ make oldconfig
$ make menuconfig  # Local Version:+ und Anwahl Epson RTC RX8010SJ
$ make modules_prepare
$ make drivers/rtc/rtc-rx8010.ko
### Installation
$ sudo cp drivers/rtc/rtc-rx8010.ko /lib/modules/$(uname -r)/drivers/rtc
$ sudo depmod -a
$ sudo modprobe rtc-rx8010

Fazit

Ein einzelnes Modul erfordert keinen kompletten Kernel-Build. Der dauert selbst auf einem RasPi 4 noch gut eine Stunde [4], auf einem Pi Zero mehr als vier Mal so lang. Einzelne Module dagegen lassen sich selbst auf Letzterem im Handumdrehen erzeugen und installieren.

Bekannte Hardware-Hersteller wie Adafruit, Pimoroni und Waveshare beschränken sich nicht nur auf das Verticken von Breakouts, sondern bieten in ihren Repositories auch den Quellcode samt passenden Installationsskripten an. Damit laufen die in diesem Artikel beschriebenen Schritte sogar vollautomatisiert ab. Der ein oder andere Euro mehr im Vergleich zu den Billigstanbietern ist dann gut angelegt. (cla)

Der Autor

Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].

Infos

  1. Versionierte Kernel-Header für den RasPi: http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/
  2. Raspberry-Pi-Kernel (Quellen): https://github.com/raspberrypi/linux
  3. Dokumentation der Kernel-Maintainer zum Modulbau: https://www.kernel.org/doc/Documentation/kbuild/modules.txt
  4. RasPi-4-Temperatur beim Kernel-Bau: https://www.raspberrypi.org/blog/new-raspberry-pi-4-case-fan/
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 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