2 Punkte von GN⁺ 2024-07-28 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-07-28
Hacker-News-Kommentare
  • Es gibt die Meinung, dass das Beispiel „Detecting button presses“ schwierig sei, weil dafür ein RPi-Modul gebaut werden muss
    • qemu ist eine gute Möglichkeit, Erfahrungen mit Kernel-Hacking zu sammeln
  • Es gibt die Meinung, dass die Linux Foundation Updates für die Bücher LDD (linux device driver) und zum Linux-Kernel fördern sollte
  • Ein Nutzer teilt die Erfahrung, es vor 22 Jahren zum ersten Mal gelesen zu haben
  • Es gibt die Nachricht, dass das neueste Update des Buchs „The Linux Memory Manager“ Anfang Juli erschien und derzeit daran editiert wird
  • Es gibt allgemeine Fragen zur Linux-Kernel-Programmierung, zum Beispiel zu Hacking am Dateisystem oder am Speichermanagement
    • Es gab das Buch „Linux Kernel Development“ von Robert Love, das aber vermutlich nicht mehr aktualisiert wird
  • Es gibt Lob für das detaillierte, praxisorientierte Tutorial zum direkten Bauen von Kernel-Modulen
  • Es gibt eine Frage dazu, ob der Autor beim Schreiben oder Überarbeiten des Textes ein LLM verwendet hat