Einführung
Autoren
- Der Linux Kernel Module Programming Guide wurde ursprünglich von Ori Pomerantz für Linux v2.2 verfasst
- Von Peter Jay Salzman für Linux v2.4 aktualisiert
- Von Michael Burian für Linux v2.6 mitbetreut
- Bob Mottram aktualisierte die Beispiele für Versionen ab Linux v3.8
- Jim Huang aktualisierte den Leitfaden für aktuelle Linux-Versionen (v5.0 und höher) und überarbeitete die LaTeX-Dokumente
Danksagung
- Mehrere Mitwirkende haben Korrekturen und Vorschläge beigesteuert
Was ist ein Kernel-Modul?
- Ein Linux-Kernel-Modul ist ein Code-Segment, das bei Bedarf dynamisch in den Kernel geladen und wieder entladen werden kann
- Kernel-Module erweitern die Funktionalität des Kernels ohne einen Systemneustart
- Ohne Module müsste der Kernel bei jeder neuen Funktion neu gebaut und das System neu gestartet werden
Kernel-Modul-Paket
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
Welche Module gibt es in meinem Kernel?
- Mit dem Befehl
lsmod lassen sich die aktuell in den Kernel geladenen Module anzeigen
- Dies ist auch über die Datei
/proc/modules möglich
Ist das Herunterladen und Kompilieren des Kernels erforderlich?
- Um diesem Leitfaden zu folgen, ist es nicht nötig, den Kernel herunterzuladen und zu kompilieren
- Es ist sicher, die Beispiele in einer Test-Distribution auszuführen
Bevor Sie beginnen
- Hinweise zu Modulversionsverwaltung, zur Verwendung des X Window System, zu SecureBoot und weiteren Punkten
Header
- Die Installation der Kernel-Header-Dateien ist erforderlich
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
Beispiele
- Alle Beispiele befinden sich im Unterverzeichnis
examples der Dokumentation
Hello World
Das einfachste Modul
- Erstellen und Kompilieren der Datei
hello-1.c
- Erklärung, wie das Modul geladen und entladen wird
Hello und Goodbye
- Beispiel für die Verwendung der Makros
module_init und module_exit
Makros __init und __exit
- Das Makro
__init gibt den Speicher frei, sobald die Initialisierungsfunktion abgeschlossen ist
- Das Makro
__exit lässt die Funktion weg, wenn das Modul fest in den Kernel eingebaut ist
Lizenz und Moduldokumentation
- Mit dem Makro
MODULE_LICENSE wird die Lizenz des Moduls festgelegt
- Beispiele für die Verwendung der Makros
MODULE_AUTHOR und MODULE_DESCRIPTION
Übergabe von Kommandozeilenargumenten
- Mit dem Makro
module_param werden Kommandozeilenargumente an das Modul übergeben
- Mit dem Makro
MODULE_PARM_DESC wird eine Beschreibung der Argumente hinzugefügt
Module über mehrere Dateien hinweg
- Beispiel für ein Kernel-Modul, das in mehrere Quelldateien aufgeteilt ist
Modul-Builds für vorkompilierte Kernel
- Erklärung, wie Module für vorkompilierte Kernel gebaut werden
Zusammenfassung von GN⁺
- Dieser Leitfaden ist eine umfassende Einführung in die Programmierung von Linux-Kernel-Modulen und behandelt mit verschiedenen Beispielen sowohl Grundkonzepte als auch fortgeschrittene Themen
- Mit Kernel-Modulen lässt sich die Funktionalität des Kernels ohne Systemneustart erweitern, was für Entwickler ein großer Vorteil ist
- Hinweise zu Modulversionsverwaltung, SecureBoot und weiteren Punkten sollten gut verstanden und beachtet werden
- Verwandte Projekte sind unter anderem Linux Device Drivers und The Linux Programming Interface
1 Kommentare
Hacker-News-Kommentare