Kernel-Module unter Linux verwalten

CompTIACompTIABeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die grundlegenden Techniken zur Verwaltung von Kernel-Modulen in einer Linux-Umgebung. Sie werden untersuchen, wie Sie aktuell geladene Module auflisten, um die aktiven Komponenten des Systems anzuzeigen, und einzelne Module inspizieren, um deren Details wie Zweck, Abhängigkeiten und andere Parameter zu verstehen.

Aufbauend auf diesen Inspektionsfähigkeiten üben Sie das dynamische Entladen und Laden von Modulen aus dem laufenden Kernel. Abschließend lernen Sie, wie Sie das System so konfigurieren, dass ein bestimmtes Kernel-Modul beim Booten automatisch geladen wird, um sicherzustellen, dass wesentliche Funktionalitäten nach einem Neustart ohne manuelles Eingreifen verfügbar sind.

Kernel-Module mit lsmod und modinfo auflisten und inspizieren

In diesem Schritt lernen Sie, wie Sie die aktuell geladenen Kernel-Module auflisten und deren Details inspizieren. Der Linux-Kernel ist modular aufgebaut, was bedeutet, dass Teile seiner Funktionalität nach Bedarf geladen oder entladen werden können. Diese dynamisch ladbaren Teile werden als Kernel-Module bezeichnet und entsprechen oft Gerätetreibern, Dateisystemtreibern oder Systemaufrufen.

Zuerst betrachten wir den Status aller Kernel-Module, die derzeit in den Kernel Ihres Systems geladen sind. Der Befehl lsmod liefert eine übersichtliche und lesbare Liste. Da die Liste recht lang sein kann, leiten wir ihre Ausgabe an das Dienstprogramm less weiter, um die Navigation zu erleichtern.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

lsmod | less

Sie sehen eine Liste von Modulen. Die Ausgabe ist in drei Spalten unterteilt: Module, Size und Used by.

  • Module: Der Name des Kernel-Moduls.
  • Size: Die Größe des Moduls in Bytes.
  • Used by: Die Anzahl anderer Module oder Prozesse, die dieses Modul derzeit verwenden, gefolgt von einer Liste der abhängigen Module.

Ihre Ausgabe wird in etwa so aussehen:

Module                  Size  Used by
nls_iso8859_1          16384  1
nls_cp437              20480  1
vfat                   20480  1
fat                    69632  1 vfat
...

Sie können mit den Pfeiltasten durch die Liste scrollen. Drücken Sie q, um den less-Viewer zu verlassen und zur Eingabeaufforderung zurückzukehren.

Nachdem Sie nun wissen, wie Sie Module auflisten, erhalten wir detaillierte Informationen zu einem bestimmten Modul. Der Befehl modinfo zeigt verschiedene Details zu einem Kernel-Modul an, wie z. B. den Dateinamen, die Lizenz, die Beschreibung, den Autor und die Abhängigkeiten.

Lassen Sie uns das Modul parport inspizieren, das mit dem Parallelport zusammenhängt.

modinfo parport

Der Befehl zeigt detaillierte Informationen über das Modul parport an.

filename:       /lib/modules/x.x.x-xx-generic/kernel/drivers/parport/parport.ko
license:        GPL
description:    Parallel port driver
author:         Philip Blundell, Tim Waugh, Grant Grundler
srcversion:     <some_version_string>
depends:
retpoline:      Y
intree:         Y
vermagic:       x.x.x-xx-generic SMP mod_unload
sig_id:         ...
signer:         ...
sig_key:        ...
sig_hashalgo:   ...
signature:      ...

Diese Ausgabe gibt Ihnen den genauen Speicherort der Moduldatei (.ko-Datei), deren Lizenz, eine kurze Beschreibung und mehr an. Beachten Sie, dass das Feld depends leer ist, was darauf hinweist, dass dieses Modul keine Abhängigkeiten hat.

Module sind oft von anderen Modulen abhängig. Der Befehl depmod erstellt eine Liste von Modulabhängigkeiten, indem er die Module in /lib/modules/$(uname -r) analysiert. Dies ermöglicht es dem System, erforderliche Module automatisch zu laden. Lassen Sie uns diese Abhängigkeitsdatei generieren. Dieser Befehl erfordert Root-Privilegien, daher verwenden wir sudo.

sudo depmod

Dieser Befehl erzeugt bei erfolgreicher Ausführung normalerweise keine Ausgabe. Er erstellt oder aktualisiert eine Datei namens modules.dep im Modulverzeichnis des Kernels. Der Teil $(uname -r) des Pfades ist eine Befehlssubstitution, die Ihre aktuelle Kernel-Release-Version einfügt.

Nun betrachten wir die gerade erstellte Abhängigkeitsdatei.

less /lib/modules/$(uname -r)/modules.dep

Diese Datei enthält eine Liste von Modulen und ihren Abhängigkeiten, die von Werkzeugen zur automatischen Modulverwaltung verwendet wird. Sie können q drücken, um less zu beenden.

Ein Kernel-Modul mit rmmod entladen

In diesem Schritt lernen Sie, wie Sie ein Kernel-Modul aus dem laufenden Kernel mit dem Befehl rmmod entladen. Das Entladen von Modulen kann nützlich sein, um Hardwareprobleme zu beheben, Systemspeicher freizugeben oder wenn ein Modul nicht mehr benötigt wird. Es ist wichtig zu beachten, dass Sie nur Module entladen können, die derzeit nicht vom System oder anderen Modulen verwendet werden.

Wir fahren mit dem Modul joydev fort, das die Joystick-Unterstützung bereitstellt. Zuerst prüfen wir, ob dieses Modul geladen ist. Wir können lsmod in Kombination mit grep verwenden, um die Ausgabe zu filtern.

lsmod | grep joydev

Wenn das Modul geladen ist, sehen Sie eine Ausgabe, die dieser ähnelt. Die genaue Größe kann variieren.

joydev                 24576  0

Die 0 in der Spalte Used by zeigt an, dass das Modul geladen ist, aber derzeit von keinem Prozess oder anderen Modul verwendet wird. Dies macht es zu einem sicheren Kandidaten für die Entfernung. Wenn diese Zahl größer als Null wäre, würde rmmod wahrscheinlich fehlschlagen und verhindern, dass Sie ein Modul entladen, von dem das System abhängt.

Nun entfernen wir das Modul joydev. Da diese Aktion den laufenden Kernel modifiziert, sind Root-Privilegien erforderlich, die wir mit sudo erhalten.

sudo rmmod joydev

Der Befehl rmmod erzeugt normalerweise keine Ausgabe, wenn er erfolgreich ist. Um zu bestätigen, dass das Modul erfolgreich entladen wurde, können wir denselben Befehl lsmod | grep joydev erneut ausführen.

lsmod | grep joydev

Dieses Mal sollte der Befehl keine Ausgabe erzeugen. Diese Stille ist Ihre Bestätigung, dass das Modul joydev nicht mehr im Kernel geladen ist.

Ein Kernel-Modul mit insmod laden

In diesem Schritt lernen Sie, wie Sie ein Kernel-Modul manuell mit dem Befehl insmod in den laufenden Kernel laden. Dies ist das Gegenstück zu rmmod. Während moderne Systeme oft ein fortschrittlicheres Werkzeug namens modprobe verwenden, das Abhängigkeiten automatisch verwaltet, ist das Verständnis von insmod grundlegend, um zu lernen, wie Kernel-Module funktionieren.

Im vorherigen Schritt haben Sie das Modul joydev entladen. Nun laden wir es wieder. Der Befehl insmod erfordert, dass Sie den vollständigen Pfad zur Objektdatei des Moduls angeben, die die Erweiterung .ko (Kernel Object) hat.

Das Standardverzeichnis für Kernel-Module ist /lib/modules/$(uname -r)/kernel/, wobei $(uname -r) Ihre aktuelle Kernel-Version erweitert. Das Modul joydev befindet sich typischerweise im Unterverzeichnis drivers/input/.

Laden wir das Modul joydev mit seinem vollständigen Pfad. Diese Operation erfordert Root-Privilegien.

sudo insmod /lib/modules/$(uname -r)/kernel/drivers/input/joydev.ko

Wie rmmod erzeugt auch insmod keine Ausgabe, wenn es erfolgreich ist.

Um zu bestätigen, dass das Modul geladen wurde, können Sie erneut den Befehl lsmod | grep joydev verwenden.

lsmod | grep joydev

Nachdem Sie den Befehl ausgeführt haben, sollten Sie das Modul joydev in der Ausgabe sehen, was bestätigt, dass es erfolgreich wieder in den Kernel geladen wurde.

joydev                 24576  0

Konfigurieren eines Kernel-Moduls zum automatischen Laden beim Booten

In diesem Schritt lernen Sie, wie Sie sicherstellen, dass ein Kernel-Modul bei jedem Systemstart automatisch geladen wird. Das manuelle Laden von Modulen mit insmod ist temporär und bleibt nach einem Neustart nicht erhalten. Um die Änderung dauerhaft zu machen, müssen Sie Ihr System so konfigurieren, dass das Modul während des Bootvorgangs geladen wird.

Auf modernen Linux-Systemen, die systemd verwenden, ist der Standardweg, Kernel-Module beim Booten automatisch zu laden, das Hinzufügen einer Konfigurationsdatei zum Verzeichnis /etc/modules-load.d/. Jede Datei in diesem Verzeichnis mit der Erweiterung .conf wird gelesen, und das System versucht, jedes darin aufgeführte Modul zu laden, eines pro Zeile.

Konfigurieren wir das Modul joydev zum automatischen Laden. Wir erstellen eine Datei namens joydev.conf in /etc/modules-load.d/ und fügen das Wort joydev hinzu. Dies können wir mit einem einzigen Befehl mit echo und tee unter Verwendung von sudo tun.

echo joydev | sudo tee /etc/modules-load.d/joydev.conf

Dieser Befehl funktioniert wie folgt:

  • echo joydev gibt den Text 'joydev' aus.
  • Die Pipe | leitet diesen Text als Eingabe an den nächsten Befehl weiter.
  • sudo tee /etc/modules-load.d/joydev.conf empfängt den Text. Der Befehl tee schreibt die empfangene Eingabe in die angegebene Datei (/etc/modules-load.d/joydev.conf) und zeigt sie auch auf dem Bildschirm an. Wir verwenden sudo, da dieses Verzeichnis geschützt ist und Root-Privilegien zum Schreiben benötigt.

Sie sollten die folgende Ausgabe sehen, die den Inhalt darstellt, der in die Datei geschrieben wird:

joydev

Um zu bestätigen, dass die Datei korrekt erstellt wurde, können Sie ihren Inhalt mit dem Befehl cat anzeigen:

cat /etc/modules-load.d/joydev.conf

Die Ausgabe sollte der Name des Moduls sein, das Sie gerade hinzugefügt haben:

joydev

Nun wird das System bei jedem Start automatisch das Modul joydev laden. Sie haben erfolgreich eine dauerhafte Modulladung konfiguriert.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Operationen zur Verwaltung von Kernel-Modulen in einer Linux-Umgebung kennengelernt. Sie haben geübt, alle aktuell geladenen Module mit dem Befehl lsmod aufzulisten und detaillierte Informationen über ein bestimmtes Modul, wie z. B. seinen Dateinamen und seine Beschreibung, mit dem Befehl modinfo abzurufen.

Sie haben auch praktische Erfahrungen mit der dynamischen Änderung des Kernels gesammelt, indem Sie ein Modul mit rmmod entladen und ein anderes mit insmod laden. Schließlich haben Sie gelernt, wie Sie ein Modul so konfigurieren, dass es beim Booten automatisch geladen wird, um sicherzustellen, dass notwendige Treiber oder Funktionalitäten nach einem Systemneustart verfügbar sind. Diese Fähigkeiten sind unerlässlich für die effektive Verwaltung von Gerätetreibern und Kernel-Funktionen.