28 Verwalten von Kernelmodulen #
Linux ist als monolithischer Kernel ausgelegt, kann jedoch mithilfe von Kernelmodulen erweitert werden. Diese besonderen Objekte lassen sich je nach Bedarf in den Kernel einfügen und wieder entfernen. Mit Kernelmodulen können also Treiber und Schnittstellen, die nicht im Kernel selbst enthalten sind, eingefügt und entfernt werden. Linux bietet einige Befehle zum Verwalten der Kernelmodule.
28.1 Auflisten der geladenen Module mit lsmod und modinfo #
Der Befehl lsmod
zeigt die derzeit geladenen Kernelmodule. Dieser Befehl liefert beispielsweise die folgende Ausgabe:
>
lsmod
Module Size Used by
snd_usb_audio 188416 2
snd_usbmidi_lib 36864 1 snd_usb_audio
hid_plantronics 16384 0
snd_rawmidi 36864 1 snd_usbmidi_lib
snd_seq_device 16384 1 snd_rawmidi
fuse 106496 3
nfsv3 45056 1
nfs_acl 16384 1 nfsv3
Die Ausgabe ist in drei Spalten gegliedert. Die Spalte Module
enthält den Namen der geladenen Module, die Spalte Size
entsprechend die Größe der einzelnen Module. Aus der Spalte Used by
gehen die Anzahl und der Name der verweisenden Module hervor. Diese Liste ist möglicherweise unvollständig.
Ausführliche Informationen zu einem bestimmten Kernelmodul erhalten Sie mit dem Befehl modinfo MODULE_NAME
, wobei MODULE_NAME für den Namen des gewünschten Kernelmoduls steht. Die modinfo
-Binärdatei befindet sich im Verzeichnis /sbin
, das nicht in der PATH-Umgebungsvariablen des Benutzers enthalten ist. Wenn Sie den Befehl modinfo
als normaler Benutzer ausführen, müssen Sie daher den vollständigen Pfad zur Binärdatei angeben:
>
/sbin/modinfo kvm
filename: /lib/modules/6.4.0-150600.9-default/kernel/arch/x86/kvm/kvm.ko.zst
license: GPL
author: Qumranet
suserelease: SLE15-SP6
srcversion: 9DACE73AC65F98D556DAD60
depends: irqbypass
supported: yes
retpoline: Y
intree: Y
name: kvm
vermagic: 6.4.0-150600.9-default SMP mod_unload modversions
28.2 Einfügen und Entfernen von Kernelmodulen #
Kernelmodule können durchaus mit den Befehlen insmod
und rmmod
eingefügt und entfernt werden; allerdings wird das Werkzeug modprobe
empfohlen. modprobe
bietet mehrere wichtige Vorteile, beispielsweise die automatische Auflösung von Abhängigkeiten und Einträge in schwarze Listen.
Wenn Sie keine Parameter angeben, wird mit dem Befehl modprobe
ein angegebenes Kernelmodul installiert. modprobe
muss mit root-Berechtigungen ausgeführt werden:
>
sudo
modprobe acpi
Zum Entfernen eines Kernelmoduls geben Sie den Parameter -r
an:
>
sudo
modprobe -r acpi
28.2.1 Automatisches Laden von Kernelmodulen beim Booten #
Statt die Kernelmodule manuell zu laden, können Sie sie mit dem Dienst systemd-modules-load.service
automatisch beim Booten laden lassen. Zum Aktivieren eines Kernelmoduls fügen Sie eine .conf
-Datei in das Verzeichnis /etc/modules-load.d/
ein. Die Konfigurationsdatei sollte dabei denselben Namen erhalten wie das Modul selbst, beispielsweise:
/etc/modules-load.d/rt2800usb.conf
Die Konfigurationsdatei muss den Namen des Kernelmoduls enthalten (z. B. rt2800usb
).
Mit dem beschriebenen Verfahren laden Sie Kernelmodule ohne Parameter. Falls Sie ein Kernelmodul mit bestimmten Optionen laden möchten, fügen Sie stattdessen eine Konfigurationsdatei in das Verzeichnis /etc/modprobe.d/
ein. Die Datei muss die Dateinamenerweiterung .conf
aufweisen. Für den Dateinamen gilt die folgende Namenskonvention: priority-modulename.conf
, beispielsweise 50-thinkfan.conf
. Die Konfigurationsdatei muss den Namen des Kernelmoduls und die gewünschten Parameter enthalten. Mit dem folgenden Beispielbefehl erstellen Sie eine Konfigurationsdatei mit dem Namen des Kernelmoduls und den zugehörigen Parametern:
>
echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkfan.conf
Die meisten Kernelmodule werden automatisch durch das System geladen, sobald ein Gerät erkannt wird oder ein Userspace bestimmte Funktionen angefordert. Sie müssen die Module daher nur in seltenen Fällen manuell in /etc/modules-load.d/
aufnehmen.
28.2.2 Eintragen von Kernelmodulen in Sperrlisten mit modprobe #
Wenn ein Kernelmodul in eine Sperrliste eingetragen wird, kann es beim Booten nicht mehr geladen werden. Dies ist von Nutzen, wenn Sie ein Modul deaktivieren möchten, das vermutlich Probleme auf dem System verursacht. Mit dem Werkzeug insmod
oder modprobe
können Sie Kernelmodule, die auf einer Sperrliste stehen, dennoch manuell laden.
Soll ein Modul in eine Sperrliste eingetragen werden, erstellen Sie eine Datei mit dem Namen /etc/modprobe.d/60-blacklist-MODULE_NAME.conf
und dem folgenden Inhalt:
blacklist MODULE_NAME
Führen Sie den Befehl dracut
als root-Benutzer aus, um ein neues initrd
-Image zu generieren, und starten Sie dann Ihren Computer neu (ersetzen Sie NAME durch den Namen der aktuellen initrd und KERNELVERSION durch den aktuell ausgeführten Kernel):
>
su
echo "blacklist nouveau" >> /etc/modprobe.d/60-blacklist-nouveau.conf
/usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/$initrd-NAME $KERNELVERSION
reboot
Soll ein Kernel-Modul nur vorübergehend deaktiviert werden, tragen Sie es direkt beim Booten in die Sperrliste ein. Drücken Sie hierzu im Bootbildschirm die Taste E. Sie gelangen zu einem minimalen Editor, in dem Sie die Bootparameter bearbeiten können. Wechseln Sie zur Zeile, die wie folgt aufgebaut ist:
linux /boot/vmlinuz...splash= silent quiet showopts
Hängen Sie den Befehl modprobe.blacklist=MODULE_NAME
an das Ende der Zeile an. Beispiel:
linux /boot/vmlinuz...splash= silent quiet showopts modprobe.blacklist=nouveau
Drücken Sie die Taste F10 oder Strg–X. Der Computer wird mit der angegebenen Konfiguration gebootet.
Um ein Kernelmodul über GRUB dauerhaft auf die Sperrliste zu setzen, öffnen Sie die Datei /etc/default/grub
zur Bearbeitung und fügen Sie dem Befehl GRUB_CMDLINE_LINUX
die Option modprobe.blacklist=MODULE_NAME
hinzu. Führen Sie dann den Befehl sudo grub2-mkconfig -o /boot/grub2/grub.cfg
aus, damit die Änderungen in Kraft treten.