Kernel-Module in Linux verwalten

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab erlernen 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 zu sehen, und einzelne Module inspizieren, um deren Details wie Verwendungszweck, Abhängigkeiten und andere Parameter zu verstehen.

Aufbauend auf diesen Analysefähigkeiten werden Sie üben, Module dynamisch aus dem laufenden Kernel zu entladen und wieder zu laden. Schließlich lernen Sie, wie Sie das System so konfigurieren, dass ein bestimmtes Kernel-Modul beim Booten automatisch geladen wird. So stellen Sie sicher, dass essenzielle Funktionen ohne manuelles Eingreifen nach einem Neustart zur Verfügung stehen.

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 überprüfen. Der Linux-Kernel ist modular aufgebaut, was bedeutet, dass Teile seiner Funktionalität bei Bedarf geladen oder entladen werden können. Diese dynamisch ladbaren Teile werden Kernel-Module genannt und entsprechen häufig Gerätetreibern, Dateisystemtreibern oder Systemaufrufen.

Zuerst schauen wir uns den Status aller Kernel-Module an, die derzeit im Kernel Ihres Systems geladen sind. Der Befehl lsmod liefert eine übersichtliche und lesbare Liste. Da die Liste recht lang sein kann, leiten wir die Ausgabe an das Dienstprogramm less weiter, um einfacher darin navigieren zu können.

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 der anderen 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 die less-Ansicht zu verlassen und zur Eingabeaufforderung zurückzukehren.

Nachdem Sie nun wissen, wie man Module auflistet, lassen Sie uns detaillierte Informationen über ein bestimmtes Modul abrufen. 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 untersuchen, das für den Parallelport zuständig ist.

modinfo parport

Der Befehl zeigt detaillierte Informationen über das parport-Modul 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 verrät Ihnen den genauen Speicherort der Moduldatei (.ko-Datei), die Lizenz, eine kurze Beschreibung und mehr. Beachten Sie, dass das Feld depends leer ist, was darauf hindeutet, dass dieses Modul keine Abhängigkeiten hat.

Module sind oft auf andere Module angewiesen. Der Befehl depmod erstellt eine Liste der 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-Rechte, daher verwenden wir sudo.

sudo depmod

Dieser Befehl erzeugt bei erfolgreichem Abschluss normalerweise keine Ausgabe. Er erstellt oder aktualisiert eine Datei namens modules.dep im Modulverzeichnis des Kernels. Der Teil $(uname -r) im Pfad ist eine Befehlssubstitution, die die aktuelle Release-Version Ihres Kernels einfügt.

Schauen wir uns nun die soeben erstellte Abhängigkeitsdatei an.

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

Diese Datei enthält eine Liste von Modulen und deren 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 mit dem Befehl rmmod aus dem laufenden Kernel entladen. Das Entladen von Modulen kann nützlich sein, um Hardwareprobleme zu beheben, Systemressourcen freizugeben oder wenn ein Modul nicht mehr benötigt wird. Wichtig ist, dass Sie nur Module entladen können, die derzeit nicht vom System oder anderen Modulen verwendet werden.

Wir arbeiten weiter mit dem Modul joydev, das die Unterstützung für Joysticks bietet. Prüfen wir zunächst, ob dieses Modul geladen ist. Wir können lsmod in Kombination mit grep verwenden, um die Ausgabe zu filtern.

lsmod | grep joydev

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

joydev                 24576  0

Die 0 in der Spalte Used by zeigt an, dass das Modul zwar geladen ist, aber derzeit von keinem Prozess oder anderen Modul verwendet wird. Damit ist es ein sicherer Kandidat für die Entfernung. Wäre diese Zahl größer als Null, würde rmmod wahrscheinlich fehlschlagen, um zu verhindern, dass Sie ein Modul entladen, auf das das System angewiesen ist.

Lassen Sie uns nun das Modul joydev entfernen. Da dieser Vorgang den laufenden Kernel verändert, sind Root-Rechte erforderlich, die wir über sudo erhalten.

sudo rmmod joydev

Der Befehl rmmod gibt normalerweise keine Rückmeldung, wenn er erfolgreich war. Um zu bestätigen, dass das Modul erfolgreich entladen wurde, führen wir den Befehl lsmod | grep joydev erneut aus.

lsmod | grep joydev

Diesmal sollte der Befehl keine Ausgabe erzeugen. Dieses Ausbleiben einer Antwort ist die Bestätigung dafür, 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 das fortschrittlichere Werkzeug modprobe verwenden, das Abhängigkeiten automatisch auflöst, ist das Verständnis von insmod grundlegend, um die Funktionsweise von Kernel-Modulen zu begreifen.

Im vorherigen Schritt haben Sie das Modul joydev entladen. Nun werden wir es wieder laden. Der Befehl insmod erfordert die Angabe des vollständigen Pfads zur Objektdatei des Moduls, die die Endung .ko (Kernel Object) hat.

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

Laden wir das Modul joydev unter Angabe des vollständigen Pfads. Dieser Vorgang erfordert Root-Rechte.

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

Wie schon rmmod gibt auch insmod bei Erfolg keine Meldung aus.

Um zu überprüfen, ob das Modul geladen wurde, verwenden Sie erneut den Befehl lsmod | grep joydev.

lsmod | grep joydev

Nach der Ausführung des Befehls sollte das Modul joydev in der Liste erscheinen, was bestätigt, dass es erfolgreich wieder in den Kernel geladen wurde.

joydev                 24576  0

Ein Kernel-Modul für das automatische Laden beim Booten konfigurieren

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 nur temporär und bleibt nach einem Neustart nicht erhalten. Um die Änderung dauerhaft zu machen, müssen Sie Ihr System so konfigurieren, dass es das Modul während des Bootvorgangs lädt.

Auf modernen Linux-Systemen, die systemd verwenden, ist der Standardweg zum automatischen Laden von Kernel-Modulen das Hinzufügen einer Konfigurationsdatei im Verzeichnis /etc/modules-load.d/. Jede Datei in diesem Verzeichnis mit der Endung .conf wird gelesen, und das System versucht, jedes darin aufgeführte Modul (eines pro Zeile) zu laden.

Lassen Sie uns das Modul joydev so konfigurieren, dass es automatisch geladen wird. Wir erstellen eine Datei namens joydev.conf innerhalb von /etc/modules-load.d/ und schreiben das Wort joydev hinein. Dies können wir mit einem einzigen Befehl mittels echo und tee unter Verwendung von sudo erledigen.

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

Dieser Befehl funktioniert wie folgt:

  • echo joydev gibt den Text 'joydev' aus.
  • Das Pipe-Symbol | 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 gleichzeitig auf dem Bildschirm an. Wir verwenden sudo, da dieses Verzeichnis geschützt ist und Schreibrechte vom Root-Benutzer erfordert.

Sie sollten die folgende Ausgabe sehen, die dem in die Datei geschriebenen Inhalt entspricht:

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

Ab jetzt wird das System bei jedem Bootvorgang das Modul joydev automatisch laden. Sie haben erfolgreich einen dauerhaften Modul-Ladevorgang 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 dessen Dateinamen und Beschreibung, mit dem Befehl modinfo abzurufen.

Zudem haben Sie praktische Erfahrung darin gesammelt, den Kernel dynamisch zu verändern, indem Sie ein Modul mit rmmod entladen und eines mit insmod geladen haben. Schließlich haben Sie gelernt, wie man ein Modul so konfiguriert, dass es beim Booten automatisch geladen wird, um sicherzustellen, dass notwendige Treiber oder Funktionen nach einem Systemneustart sofort verfügbar sind. Diese Fähigkeiten sind essenziell für die effektive Verwaltung von Gerätetreibern und Kernel-Funktionen.