Kernel-Module verwalten

Beschreibt, wie geladene Kernel-Module geprüft, Parameter angepasst und gesteuert werden, welche Module auf Oracle Linux geladen werden.

Mit dem Befehl lsmod können Sie anzeigen, welche Module in den laufenden Kernel geladen werden. Mit dem Befehl modinfo finden Sie Informationen zu einem Kernel-Modul. Verwenden Sie den Befehl modprobe, um ein Modul in den laufenden Kernel zu laden oder Kernel-Modulparameter zu ändern. Sie können auch Konfigurationsdateien in /etc/modprobe.d/ erstellen, um Parameter zu steuern, die beim Laden von Kernel-Modulen verwendet werden. Sie können auch konfigurieren, ob Module beim Booten geladen werden, indem Sie die Konfiguration in /etc/modules-load.d/ bearbeiten.

Informationen zu geladenen Modulen auflisten

Verwenden Sie den Befehl lsmod, um Module aufzulisten, die in den Kernel geladen werden, und verwenden Sie den Befehl modinfo, um weitere Informationen zu den einzelnen Modulen zu erhalten. Weitere Informationen finden Sie in den Handbuchseiten lsmod(5) und modinfo(8).
  1. Führen Sie den Befehl lsmod aus, um die Module aufzulisten, die in den Kernel geladen werden.
    lsmod
    Module                  Size  Used by
    udp_diag               16384  0
    ib_core               311296  0
    tcp_diag               16384  0
    inet_diag              24576  2 tcp_diag,udp_diag
    nfsv3                  49152  0
    nfs_acl                16384  1 nfsv3
    ...
    dm_mirror              24576  0
    dm_region_hash         20480  1 dm_mirror
    dm_log                 20480  2 dm_region_hash,dm_mirror
    ...

    Die Ausgabe zeigt den Modulnamen, die Speichermenge, die Anzahl der Prozesse, die das Modul verwenden, und die Namen anderer Module, von denen es abhängt. Beispiel: Das Modul dm_log hängt von den Modulen dm_region_hash und dm_mirror ab. Das Beispiel zeigt auch, dass zwei Prozesse alle drei Module verwenden.

  2. Verwenden Sie den Befehl modinfo, um detaillierte Informationen zu einem Modul anzuzeigen.
    modinfo ahci
    filename:       /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/drivers/ata/ahci.ko.xz
    version:        3.0
    license:        GPL
    description:    AHCI SATA low-level driver
    author:         Jeff Garzik
    srcversion:     1DC2CDA088C5DC03187A5E0
    alias:          pci:v*d*sv*sd*bc01sc06i01*
    ...
    depends:        libata,libahci
    intree:         Y
    name:           ahci
    retpoline:      Y
    vermagic:       6.12.0-100.28.2.el10uek.x86_64 SMP preempt mod_unload modversions 
    sig_id:         PKCS#7
    signer:         Oracle CA Server
    sig_key:        7B:38:D7:DC:38:51:E7:C7:F1:61:C5:5D:8D:CC:6B:1C:90:82:4D:05
    sig_hashalgo:   sha512
    signature:      64:05:FC:CC:B1:D3:88:91:B6:C9:A2:39:A3:A9:BB:8C:95:11:36:20:
                    62:9C:95:D9:8B:B8:F6:5F:CC:D2:93:4E:7D:59:E1:80:DB:70:FA:4C:
                    9B:8D:75:E3:98:AB:9D:BD:94:93:A7:72:0B:28:3B:15:4E:96:0D:E3:
                    9F:FE:24:1A:09:B5:31:27:F2:EE:45:61:C8:4A:D3:4B:82:07:23:66:
                    A1:06:F4:DF:B9:FF:D2:78:08:1D:AA:EC:DE:3C:E4:17:BD:69:6A:A5:
    
                    ...
                    64:F0:4F:E2:4E:F3:47:A5:40:E8:F7:07:68:3F:58:25:32:BA:13:E9:
                    00:46:7A:2F:30:73:B4:32:48:76:6B:1E
    parm:           marvell_enable:Marvell SATA via AHCI (1 = enabled) (int)
    parm:           mobile_lpm_policy:Default LPM policy for mobile chipsets (int)
    ...

    Die Ausgabe enthält die folgenden Informationen:

    filename

    Absoluter Pfad der Kernel-Objektdatei.

    version

    Versionsnummer des Moduls. Beachten Sie, dass die Versionsnummer möglicherweise nicht für gepatchte Module aktualisiert wird und möglicherweise in neueren Kernel fehlt oder entfernt wird.

    license

    Lizenzinformationen für das Modul.

    description

    Kurze Beschreibung des Moduls.

    author

    Autorgutschrift für das Modul.

    srcversion

    Hash des Quellcodes, mit dem das Modul erstellt wurde.

    alias

    Interne Aliasnamen für das Modul.

    depends

    Durch Komma getrennte Liste aller Module, von denen dieses Modul abhängt.

    retpoline

    Ein Flag, das angibt, dass das Modul erstellt wurde, das eine Minderung der Spectre-Sicherheitslücke enthält.

    name
    Der Name des Moduls.
    intree

    Ein Flag, das angibt, dass das Modul aus der Kernel-In-Tree-Quelle erstellt wurde und nicht verfälscht ist.

    vermagic

    Kernel-Version, die zum Kompilieren des Moduls verwendet wurde, die beim Laden des Moduls mit dem aktuellen Kernel verglichen wird.

    sig_id

    Die Methode zum Speichern von Signaturschlüsseln, die möglicherweise zum Signieren eines Moduls für den sicheren Start verwendet wurden, in der Regel PKCS#7

    signer

    Der Name des Signaturschlüssels, mit dem ein Modul für den sicheren Start signiert wird.

    sig_key

    Die Signaturschlüssel-ID für den Schlüssel, mit dem das Modul signiert wird.

    sig_hashalgo

    Der Algorithmus, mit dem der Signaturhash für ein signiertes Modul generiert wird.

    signature

    Die Signaturdaten für ein signiertes Modul.

    parm

    Modulparameter und Beschreibungen.

  3. Verwenden Sie den Befehl modinfo -n, um den Dateipfad zum Modul im Dateisystem zu suchen.

    Module werden aus Kernel-Objektdateien (/lib/modules/kernel_version/kernel/*ko*) in den Kernel geladen. Um den absoluten Pfad einer Kernel-Objektdatei anzuzeigen, geben Sie die Option -n an. Beispiel:

    modinfo -n parport
    /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/drivers/parport/parport.ko.xz

Module laden und entladung

Module werden mit dem Befehl modprobe geladen und entladen. Weitere Informationen finden Sie in den Handbuchseiten modprobe(8) und modules.dep(5).
  1. Laden Sie ein Kernel-Modul mit dem Befehl modprobe.

    Der Befehl modprobe lädt Kernel-Module. Beispiel:

    sudo modprobe nfs
    sudo lsmod | grep nfs
    nfs                   266415  0 
    lockd                  66530  1 nfs
    fscache                41704  1 nfs
    nfs_acl                 2477  1 nfs
    auth_rpcgss            38976  1 nfs
    sunrpc                204268  5 nfs,lockd,nfs_acl,auth_rpcgss

    Nehmen Sie die Option -v (verbose) auf, um anzuzeigen, ob andere Module geladen werden, um Abhängigkeiten aufzulösen.

    sudo modprobe -v nfs
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko 
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/nfs_common/nfs_acl.ko 
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/fscache/fscache.ko 
    ...
    Hinweis

    Der Befehl modprobe lädt keine Module neu, die bereits geladen sind. Sie müssen zuerst ein Modul entladen, bevor Sie es erneut laden können.

  2. Entladen Sie ein Modul mit dem Befehl modprobe -r.

    Verwenden Sie die Option -r, um Kernel-Module zu entladen:

    sudo modprobe -rv nfs
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/nfs/nfs.ko
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/lockd/lockd.ko
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/fscache/fscache.ko
    ...

    Module werden in umgekehrter Reihenfolge entladen, in der sie zuerst geladen wurden. Module werden nicht entladen, wenn ein Prozess oder ein anderes geladenes Modul sie benötigt.

Kernel-Modulparameter ändern

Kernel-Module wie Hardwaretreiber verfügen häufig über benutzerdefinierte Parameter, mit denen das Verhalten des Treibers oder Moduls geändert werden kann. Es stehen mehrere Mechanismen zur Aktualisierung von Modulparametern zur Verfügung.
  1. Verwenden Sie sysfs, um Modulparameter sofort zu aktualisieren.

    Sie können die Werte einiger Parameter für geladene Module und integrierte Treiber ändern, indem Sie den neuen Wert in eine Datei unter /sys/module/module_name/parameters schreiben. Beispiel:

    echo 0 | sudo tee /sys/module/ahci/parameters/skip_host_reset

    Siehe About the /sys Virtual File System und sysfs Directory Reference.

    Beachten Sie, dass Änderungen nicht persistent sind und nach dem Neustart nicht automatisch übernommen werden.

  2. Mit dem Befehl modprobe können Sie die ausgeführte Konfiguration für ein Modul ändern.

    Um das Verhalten eines Moduls zu ändern, geben Sie im Befehl modprobe Parameter für das Modul an:

    sudo modprobe module_name parameter=value ...

    Trennen Sie Parameter- und Wertpaare durch Leerzeichen. Arraywerte werden durch eine durch Komma getrennte Liste dargestellt. Beispiel:

    sudo modprobe foo parm=bar arrayparm=1,2,3,4
  3. Aktualisieren Sie die Konfiguration modprobe, um weitere Änderungen an der permanenten Modulkonfiguration vorzunehmen.
    Konfigurationsdateien (/etc/modprobe.d/*.conf) geben Moduloptionen an, erstellen Modulaliasnamen und setzen das übliche Verhalten von modprobe für Module mit besonderen Anforderungen außer Kraft. Die Datei /etc/modprobe.conf, die mit früheren Versionen von modprobe verwendet wurde, ist auch gültig, wenn sie vorhanden ist. Die Einträge in den Dateien /etc/modprobe.conf und /etc/modprobe.d/*.conf verwenden dieselbe Syntax. Weitere Informationen finden Sie in der Modprobe-Konfigurationsreferenz.

Festlegen der Module, die beim Booten geladen werden sollen

Die meisten Module werden beim Systemstart automatisch geladen. Sie können auch Module hinzufügen, die geladen werden sollen, indem Sie eine Konfigurationsdatei für das Modul im Verzeichnis /etc/modules-load.d erstellen. Der Dateiname muss die Erweiterung .conf aufweisen.

Änderungen am Verzeichnis /etc/modules-load.d bleiben auch nach einem Neustart bestehen.

  1. Um das Laden eines Moduls beim Booten zu erzwingen, erstellen Sie eine Konfigurationsdatei in /etc/modules-load.d für das Modul.
    Beispiel: Um das Laden von bnxt_en.conf beim Booten zu erzwingen, führen Sie den folgenden Befehl aus:
    echo bnxt_en | sudo tee /etc/modules-load.d/bnxt_en.conf
  2. Prüfen Sie, ob die Datei vorhanden ist und den Modulnamen enthält.
    cat /etc/modules-load.d/bnxt_en.conf

    Wenn das Modul noch nicht geladen ist, können Sie es manuell mit dem Befehl modprobe laden, oder Sie können das System neu starten und es wird automatisch mit der angegebenen Konfiguration geladen.

Laden von Modulen beim Booten verhindern

Sie können verhindern, dass Module beim Booten geladen werden, indem Sie eine Verweigerungsregel in einer Konfigurationsdatei im Verzeichnis /etc/modprobe.d hinzufügen und dann die anfängliche Ramdisk neu erstellen, mit der der Kernel beim Booten geladen wird.

Warnung

Das Deaktivieren von Modulen kann unbeabsichtigte Folgen haben und verhindern, dass ein System nach dem Booten bootet oder voll funktionsfähig ist. Als Best Practice sollten Sie ein Backup-Ramdisk-Image erstellen, bevor Sie Änderungen vornehmen, und sicherstellen, dass die Konfiguration korrekt ist.

  1. Erstellen Sie eine Konfigurationsdatei, um zu verhindern, dass das Modul geladen wird.

    Beispiel:

    sudo tee /etc/modprobe.d/bnxt_en-deny.conf <<'EOF'
    #DENY bnxt_en
    blacklist bnxt_en
    install bnxt_en /bin/false
    EOF
  2. Erstellen Sie das anfängliche RAM-Disk-Abbild neu.
    sudo dracut -f -v
  3. Starten Sie das System neu, damit die Änderungen wirksam werden.
    sudo reboot

Schwache Aktualisierungsmodule entfernen

In bestimmten Fällen können Sie schwache Update-Module anstelle eines neueren Kernels entfernen, z. B. wenn ein Problem mit einem mitgelieferten Treiber in einem neueren Kernel behoben wurde. In diesem Fall sollten Sie den neuen Treiber anstelle des externen Moduls verwenden, das Sie im Rahmen eines Treiberupdates installiert haben. Weitere Informationen finden Sie unter Informationen zu schwachen Aktualisierungsmodulen.

Zwei verschiedene Ansätze können verwendet werden, um ein schwaches Update-Modul zu entfernen.

  1. Entfernen Sie den symbolischen Link manuell.

    Da schwache Update-Module für jede Kernel-Version auf dem System symbolisch verknüpft sind, können Sie den symbolischen Link für das Modul aus jedem Kernel entfernen, in dem es nicht angewendet werden soll. Beispiel:

    sudo rm -rf /lib/modules/6.12.0-100.28.2.el10uek.x86_64/weak-updates/kmod-kvdo

    In diesem Beispiel wird das schwache Update-Modul kmod-kvdo aus dem Kernel 6.12.0-100.28.2.el10uek.x86_64 entfernt.

  2. Entfernen Sie das Modul mit dem Befehl weak-modules.

    Mit dem Befehl weak-modules können Sie ein angegebenes schwaches Aktualisierungsmodul für alle kompatiblen Kernel entfernen oder das schwache Aktualisierungsmodul für den aktuellen Kernel mit dem Befehl entfernen. Sie können auch den Befehl weak-modules verwenden, um schwache Update-Module hinzuzufügen. Um weitere Informationen zu diesem Befehl zu erhalten, führen Sie folgenden Befehl aus:

    weak-modules -h

    Sie können auch den Befehl weak-modules mit der Option dry-run verwenden, um die Ergebnisse zu testen, ohne tatsächliche Änderungen vorzunehmen. Beispiel:

    weak-modules --remove-kernel --dry-run --verbose