Zum Inhalt springen

Linux/Kernel/Module/Anwendung: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
[[Wikipedia:Loadable kernel module#Linux|Kernel module]]s are pieces of code that can be loaded and unloaded into the kernel upon demand
Kernel-Module sind Codeabschnitte, die bei Bedarf in den Kernel geladen und wieder entfernt werden können.
* They extend the functionality of the kernel without the need to reboot the system


To create a kernel module, you can read [https://sysprog21.github.io/lkmpg/ The Linux Kernel Module Programming Guide]
* Sie erweitern die Funktionalität des Kernels, ohne dass das System neu gestartet werden muss.
* A module can be configured as built-in or loadable
* To dynamically load or remove a module, it has to be configured as a loadable module in the kernel configuration (the line related to the module will therefore display the letter M)


To rebuild a kernel module automatically when a new kernel is installed, see [[Dynamic Kernel Module Support]] (DKMS)
Informationen zum Erstellen eines Kernel-Moduls finden Sie unter The Linux Kernel Module Programming Guide


== Obtaining information ==
* Ein Modul kann als integriertes oder ladbares Modul konfiguriert werden.
Usually modules depend on the kernel release and are stored in the /usr/lib/modules/''kernel_release''/ directory
* Um ein Modul dynamisch zu laden oder zu entfernen, muss es in der Kernelkonfiguration als ladbares Modul konfiguriert sein (die Zeile, die sich auf das Modul bezieht, wird dann mit dem Buchstaben M angezeigt).


; Tip
Informationen zum automatischen Neuerstellen eines Kernelmoduls bei der Installation eines neuen Kernels finden Sie unter „[[Dynamic Kernel Module Support]] (DKMS)“.
: Run uname -r (or uname --kernel-release) to get your current kernel release


; Note
== Informationen abrufen ==
: Module and [[#Aliasing|alias]] names often use underscores (_) or dashes (-); however, those symbols are interchangeable when using the ''modprobe'' command and in configuration files in /etc/modprobe.d/ (automatic conversion to underscores is performed, see 8|modprobe|DESCRIPTION and 5|modprobe.d|DESCRIPTION)
Module hängen in der Regel von der Kernel-Version ab und sind im Verzeichnis /usr/lib/modules/''kernel_release''/ gespeichert.


To show what kernel modules are currently loaded
; Tipp
$ lsmod
: Führen Sie uname -r (oder uname --kernel-release) aus, um Ihre aktuelle Kernel-Version zu ermitteln.


To show information about a module
; Hinweis
$ modinfo ''module_name''
: Modul- und [[Linux/Kernel/Module/tmp#Aliasing|Aliasnamen]] verwenden häufig Unterstriche (_) oder Bindestriche (-); diese Symbole sind jedoch bei Verwendung des Befehls ''modprobe'' und in Konfigurationsdateien in /etc/modprobe.d/ austauschbar (die automatische Umwandlung in Unterstriche erfolgt, siehe 8|modprobe|BESCHREIBUNG und 5|modprobe.d|BESCHREIBUNG).


To list the options that are set for a loaded module use systool from [[sysfsutils]]
So zeigen Sie an, welche Kernel-Module derzeit geladen sind
  $ systool -v -m ''module_name''
$ lsmod
 
Um Informationen zu einem Modul anzuzeigen
To display the comprehensive configuration of all the modules
$ modinfo ''Modulname''
Um die für ein geladenes Modul festgelegten Optionen aufzulisten, verwenden Sie systool aus [[sysfsutils]]
  $ systool -v -m ''Modulname''
Um die umfassende Konfiguration aller Module anzuzeigen
  $ modprobe -c | less
  $ modprobe -c | less
Um die Konfiguration eines bestimmten Moduls anzuzeigen
$ modprobe -c | grep ''Modulname''
Auflisten der Abhängigkeiten eines Moduls (oder Alias), einschließlich des Moduls selbst
$ modprobe --show-depends ''Modulname''


To display the configuration of a particular module
== Automatisches Laden von Modulen ==
$ modprobe -c | grep ''module_name''
Heutzutage wird das Laden aller erforderlichen Module automatisch von [[udev]] übernommen. Wenn Sie also keine Kernel-Module außerhalb des Baums verwenden müssen, müssen Sie keine Module, die beim Booten geladen werden sollen, in eine Konfigurationsdatei eintragen


List the dependencies of a module (or alias), including the module itself
* Es gibt jedoch Fälle, in denen Sie möglicherweise während des Bootvorgangs ein zusätzliches Modul laden oder ein anderes Modul auf die Blacklist setzen möchten, damit Ihr Computer ordnungsgemäß funktioniert
$ modprobe --show-depends ''module_name''


== Automatic module loading ==
=== Frühes Laden von Modulen ===
Today, all necessary modules loading is handled automatically by [[udev]], so if you do not need to use any out-of-tree kernel modules, there is no need to put modules that should be loaded at boot in any configuration file
Das frühe Laden von Modulen hängt vom verwendeten [[initramfs]]-Generator ab
* However, there are cases where you might want to load an extra module during the boot process, or blacklist another one for your computer to function properly


=== Early module loading ===
* [[Booster#Early module loading|Booster#Frühes Laden von Modulen]]
Early module loading depends on the [[initramfs]] generator used
* [[Dracut#Early kernel module loading|Dracut#Frühes Laden von Kernel-Modulen]]
* [[Booster#Early module loading]]
* [[Dracut#Early kernel module loading]]
* [[Mkinitcpio#MODULES]]
* [[Mkinitcpio#MODULES]]


; Note
; Hinweis
: The ''initramfs'' image may not contain the kernel modules asked for in /etc/modules-load.d/, it also may lack the files that have been set in that folder (see [[#systemd]])
: Das ''initramfs''-Image enthält möglicherweise nicht die in /etc/modules-load.d/ angeforderten Kernel-Module, außerdem können Dateien fehlen, die in diesem Ordner festgelegt wurden (siehe [[#systemd]]).


=== systemd ===
=== systemd ===
Kernel modules can be explicitly listed in files under /etc/modules-load.d/ for systemd to load them during boot
Kernel-Module können explizit in Dateien unter /etc/modules-load.d/ aufgeführt werden, damit systemd sie beim Booten lädt.
* Each configuration file is named in the style of /etc/modules-load.d/''program''.conf
 
* Configuration files simply contain a list of kernel modules names to load, separated by newlines
* Jede Konfigurationsdatei wird im Stil von /etc/modules-load.d/''program''.conf benannt.
* Empty lines and lines whose first non-whitespace character is # or ; are ignored
* Konfigurationsdateien enthalten lediglich eine Liste der zu ladenden Kernel-Modulnamen, getrennt durch Zeilenumbrüche.
* Leere Zeilen und Zeilen, deren erstes Nicht-Leerzeichen # oder ; ist, werden ignoriert.


; /etc/modules-load.d/virtio-net.conf
; /etc/modules-load.d/virtio-net.conf
  # Load virtio_net.ko at boot
 
  # virtio_net.ko beim Booten laden
 
  virtio_net
  virtio_net
Weitere Informationen finden Sie unter [[modules-load.d]].
== Manuelle Modulverwaltung ==
Kernel-Module werden von Tools aus dem Paket kmod verwaltet, das als Abhängigkeit eines Kernel-Pakets installiert wird.
* Sie können diese Tools manuell verwenden.
* So laden Sie ein Modul:
# modprobe ''Modulname''
; Hinweis
: Wenn Sie Ihren Kernel aktualisiert, aber noch nicht neu gestartet haben, schlägt ''modprobe'' ohne Fehlermeldung mit dem Code 1 fehl, da der Pfad /usr/lib/modules/''kernel_release''/ nicht mehr existiert.
* Überprüfen Sie manuell, ob dieser Pfad existiert, wenn ''modprobe'' fehlgeschlagen ist, um festzustellen, ob dies der Fall ist
Um ein Modul über einen Dateinamen zu laden, d. h.
* eines, das nicht im Verzeichnis /usr/lib/modules/''kernel_release''/ installiert ist, verwenden Sie einen der folgenden Befehle:
# insmod ''Dateiname'' ''Moduloptionen''
# modprobe ''Dateiname''
Um ein Modul zu entladen (''entfernen''), verwenden Sie einen der folgenden Befehle:
# rmmod ''Modulname''


See [[modules-load.d]] for more details
# modprobe -r ''Modulname''


== Manual module handling ==
  # modprobe --remove ''Modulname''
Kernel modules are handled by tools provided by the kmod package, which is installed as a dependency of a kernel package
* You can use these tools manually
* To load a module:
  # modprobe ''module_name''


; Note
== Moduloptionen festlegen ==
: If you have upgraded your kernel but have not yet rebooted, ''modprobe'' will fail with no error message and exit with code 1, because the path /usr/lib/modules/''kernel_release''/ no longer exists
Um einen Parameter an ein Kernelmodul zu übergeben, können Sie ihn manuell mit ''modprobe'' übergeben oder sicherstellen, dass bestimmte Parameter immer angewendet werden, indem Sie eine ''modprobe''-Konfigurationsdatei verwenden oder den [[Kernel command line|Kernel-Befehlszeilenparameter]]
* Check manually if this path exists when ''modprobe'' failed to determine if this is the case


To load a module by a file name—i.e
* Wenn das Modul in den Kernel integriert ist, muss die Kernel-Befehlszeile verwendet werden, andere Methoden funktionieren nicht.
* one that is not installed in the /usr/lib/modules/''kernel_release''/ directory—use any of:
# insmod ''file_name'' ''module_options''
# modprobe ''file_name''


To unload—''remove''—a module, use any of:
=== modprobe verwenden ===
# rmmod ''module_name''
Die grundlegende Methode zum Übergeben von Parametern an ein Modul ist die Verwendung des Befehls ''modprobe''
# modprobe -r ''module_name''
# modprobe --remove ''module_name''


== Setting module options ==
* Parameter werden in der Befehlszeile mit einfachen 1=''Schlüssel''=''Wert''-Zuweisungen angegeben:
To pass a parameter to a kernel module, you can pass them manually with ''modprobe'' or assure certain parameters are always applied using a ''modprobe'' configuration file or by using the [[kernel command line]]
* If the module is built into the kernel, the kernel command line must be used and other methods will not work


=== Using modprobe ===
  # modprobe ''Modulname'' ''Parametername''=''Parameterwert''
The basic way to pass parameters to a module is using the ''modprobe'' command
* Parameters are specified on command line using simple 1=''key''=''value'' assignments:
  # modprobe ''module_name'' ''parameter_name''=''parameter_value''


=== Using modprobe.d ===
=== Verwendung von modprobe.d ===
Configuration files in the /etc/modprobe.d/ directory can be used to pass module settings to [[udev]], which will use ''modprobe'' to manage the loading of the modules during system boot
Konfigurationsdateien im Verzeichnis /etc/modprobe.d/ können verwendet werden, um Moduleinstellungen an [[udev]] zu übergeben, das ''modprobe'' verwendet, um das Laden der Module während des Systemstarts zu verwalten
* Files in this directory can have any name, given that they end with the ''.conf'' extension
 
* The file name matters, see 5|modprobe.d|CONFIGURATION DIRECTORIES AND PRECEDENCE
* Dateien in diesem Verzeichnis können beliebige Namen haben, sofern sie die Erweiterung ''.conf'' haben.
* To show the effective configuration:
* Der Dateiname ist wichtig, siehe 5|modprobe.d|KONFIGURATIONSDIREKTORIES UND PRIORITÄTEN
* So zeigen Sie die effektive Konfiguration an:


  $ systemd-analyze cat-config modprobe.d
  $ systemd-analyze cat-config modprobe.d
Die Syntax lautet:


The syntax is:
; /etc/modprobe.d/''Dateiname''.conf
; /etc/modprobe.d/''file_name''.conf
options ''module_name parameter_name=parameter_value''


Optionen ''Modulname Parametername=Parameterwert''


; Note
; Hinweis
: All options for a given module '''must''' be defined in a single line
: Alle Optionen für ein bestimmtes Modul '''müssen''' in einer einzigen Zeile definiert werden.
* New options line with the same module name replaces the previous one


Multiple module parameters are separated by spaces, in turn a parameter can receive a list of values which is separated by commas:
* Eine neue Optionszeile mit demselben Modulnamen ersetzt die vorherige.


; /etc/modprobe.d/''file_name''.conf
Mehrere Modulparameter werden durch Leerzeichen getrennt, ein Parameter kann wiederum eine Liste von Werten erhalten, die durch Kommas getrennt sind:
  options ''module_name param1=value1 param2=value2a,value2b …''
 
; /etc/modprobe.d/''Dateiname''.conf
 
  Optionen ''Modulname param1=Wert1 param2=Wert2a,Wert2b …''
 
; Beispiel


; For example
/etc/modprobe.d/thinkfan.conf
/etc/modprobe.d/thinkfan.conf
  # On ThinkPads, this lets the 'thinkfan' daemon control fan speed
  # Auf ThinkPads kann damit der Daemon „thinkfan“ die Lüftergeschwindigkeit steuern.
 
  options thinkpad_acpi fan_control=1
  options thinkpad_acpi fan_control=1


; Note
; Hinweis
: If any of the affected modules is loaded from the [[initramfs]], then you will need to add the appropriate ''.conf'' file to FILES in [[mkinitcpio.conf]] or use the modconf [[Mkinitcpio.conf#HOOKS|hook]], then [[regenerate the initramfs]] to include the ''.conf'' file
: Wenn eines der betroffenen Module aus dem [[initramfs]] geladen wird, müssen Sie die entsprechende ''.conf''-Datei zu FILES in [[mkinitcpio.conf]] hinzufügen oder den modconf-[[Mkinitcpio.conf#HOOKS|Hook]] verwenden und dann [[Regenerate the initramfs|das initramfs neu generieren]], um die ''.conf''-Datei einzubinden.
* To see the contents of the default initramfs use [[mkinitcpio#Extracting the image|lsinitcpio]]
 
* Um den Inhalt des Standard-initramfs anzuzeigen, verwenden Sie [[Mkinitcpio#Extracting the image|lsinitcpio]].
 
=== Verwendung der Kernel-Befehlszeile ===
Sie können Optionen auch über die Kernel-Befehlszeile an das Modul übergeben
 
* Dies ist die einzige funktionierende Option für Module, die in den Kernel integriert sind.
* Für alle gängigen [[Boot loader|Bootloader]] ist die folgende Syntax korrekt:


=== Using kernel command line ===
  ''Modulname.Parametername=Parameterwert''
You can also pass options to the module using the kernel command line
 
* This is the only working option for modules built into the kernel
; Beispiel
* For all common [[boot loader]]s, the following syntax is correct:
  ''module_name.parameter_name=parameter_value''


; For example
  thinkpad_acpi.fan_control=1
  thinkpad_acpi.fan_control=1
Fügen Sie dies einfach in die entsprechende Zeile Ihrer Bootloader-Konfiguration ein, wie unter [[Kernel parameters#Boot loader configuration|Kernel-Parameter#Bootloader-Konfiguration]] beschrieben.


Simply add this to the appropriate line in your boot loader configuration, as described in [[Kernel parameters#Boot loader configuration]]
== Aliasing ==
Aliase sind alternative Namen für ein Modul.


== Aliasing ==
* Beispiel: alias my-mod really_long_modulename bedeutet, dass Sie modprobe my-mod anstelle von modprobe really_long_modulename verwenden können
Aliases are alternate names for a module
* Sie können auch Shell-ähnliche Platzhalter verwenden, sodass alias my-mod* really_long_modulename bedeutet, dass modprobe my-mod-something denselben Effekt hat
* For example: alias my-mod really_long_modulename means you can use modprobe my-mod instead of modprobe really_long_modulename
* Erstellen Sie einen Alias:
* You can also use shell-style wildcards, so alias my-mod* really_long_modulename means that modprobe my-mod-something has the same effect
* Create an alias:


; /etc/modprobe.d/myalias.conf
; /etc/modprobe.d/myalias.conf
  alias my-mod really_long_module_name
  alias my-mod really_long_module_name
Aliase können intern sein – also im Modul selbst enthalten


Aliases can be internal—contained in the module itself
* Interne Aliase werden in der Regel für das [[Linux/Kernel/Module/tmp#Automatic module loading|#Automatische Laden von Modulen]] verwendet, wenn dies von einer Anwendung benötigt wird, z. B.
* Internal aliases are usually used for [[#Automatic module loading]] when it is needed by an application, e.g
* wenn der Kernel ein neues Gerät erkennt
* when the kernel detects a new device


To see the module internal aliases
So zeigen Sie die internen Aliase des Moduls an
  $ modinfo --field=alias ''module_name''
  $ modinfo --field=alias ''module_name''
So zeigen Sie sowohl konfigurierte als auch interne Aliase an
$ modprobe --showconfig | grep '\<''module_name''$'


To see both configured and internal aliases
== Blacklist ==
$ modprobe --showconfig | grep '\<''module_name''$'
Blacklisting ist im Zusammenhang mit Kernel-Modulen ein Mechanismus, der das Laden des Kernel-Moduls verhindert
 
* Dies kann beispielsweise nützlich sein, wenn die zugehörige Hardware nicht benötigt wird oder wenn das Laden dieses Moduls Probleme verursacht: Es kann beispielsweise zwei Kernel-Module geben, die versuchen, dieselbe Hardware zu steuern, und deren gleichzeitiges Laden zu einem Konflikt führen würde.
 
; Tipp
: Verwechseln Sie den ''Blacklisting'' als Oberbegriff nicht mit der Verwendung des Schlüsselworts blacklist als [[Linux/Kernel/Module/tmp#blacklist|Sonderfall]] des Blacklistings.


== Blacklisting ==
Einige Module werden als Teil des [[initramfs]] geladen.
Blacklisting, in the context of kernel modules, is a mechanism to prevent the kernel module from loading
* This could be useful if, for example, the associated hardware is not needed, or if loading that module causes problems: for instance there may be two kernel modules that try to control the same piece of hardware, and loading them together would result in a conflict


; Tip
* mkinitcpio -M gibt alle automatisch erkannten Module aus: Um zu verhindern, dass initramfs einige dieser Module lädt, setzen Sie sie in einer ''.conf''-Datei unter /etc/modprobe.d auf die Blacklist, und sie werden beim Erstellen des Images durch den modconf-Hook hinzugefügt.
: Do not confuse the ''blacklisting'' as a generic term with using the blacklist keyword as a blacklisting [[#blacklist|particular case]]
* Mit mkinitcpio -v werden alle Module aufgelistet, die von den verschiedenen Hooks (z. B.
* Dateisystem-Hook, Block-Hook, und weitere)
* Denken Sie daran, diese ''.conf''-Datei zum FILES-Array in /etc/mkinitcpio.conf hinzuzufügen, wenn Sie den modconf-Hook nicht in Ihrem HOOKS-Array haben (z. B.
* Sie von der Standardkonfiguration abgewichen sind), und nachdem Sie die Module auf die Blacklist gesetzt haben, [[Regenerate the initramfs|generieren Sie das initramfs neu]] und starten Sie anschließend neu.


Some modules are loaded as part of the [[initramfs]]
=== Verwendung von modprobe.d ===
* mkinitcpio -M will print out all automatically detected modules: to prevent the initramfs from loading some of those modules, blacklist them in a ''.conf'' file under /etc/modprobe.d and it shall be added in by the modconf hook during image generation
* Running mkinitcpio -v will list all modules pulled in by the various hooks (e.g
* filesystems hook, block hook, und weitere)
* Remember to add that ''.conf'' file to the FILES array in /etc/mkinitcpio.conf if you do not have the modconf hook in your HOOKS array (e.g
* you have deviated from the default configuration), and once you have blacklisted the modules [[regenerate the initramfs]], and reboot afterwards


=== Using modprobe.d ===
==== alias ====
==== alias ====
Disable an [[#Aliasing|alias]] by overriding
Deaktivieren Sie einen [[Linux/Kernel/Module/tmp#Aliasing|alias]], indem Sie ihn überschreiben.
* For example, to prevent Bluetooth module autoloading taking module named off does not exist:
 
* Um beispielsweise zu verhindern, dass das Bluetooth-Modul automatisch geladen wird, entfernen Sie den Modulnamen, der nicht existiert:


; /etc/modprobe.d/modprobe.conf
; /etc/modprobe.d/modprobe.conf
  alias net-pf-31 off
  alias net-pf-31 off


; Note
; Hinweis
: Alias overriding can prevent automatic module loading, but will still allow the module to be loaded—both automatically and manually—by another alias or the module name
: Das Überschreiben von Aliasnamen kann das automatische Laden von Modulen verhindern, aber das Modul kann weiterhin – sowohl automatisch als auch manuell – über einen anderen Aliasnamen oder den Modulnamen geladen werden.


==== blacklist ====
==== blacklist ====
To disable all internal aliases for a given module use the blacklist keyword
Um alle internen Aliasnamen für ein bestimmtes Modul zu deaktivieren, verwenden Sie das Schlüsselwort blacklist
* For example, to prevent the pcspkr module from loading on boot to avoid sounds through the [[PC speaker]]:
 
* Um beispielsweise zu verhindern, dass das Modul pcspkr beim Booten geladen wird und Töne über den [[PC speaker|PC-Lautsprecher]] ausgibt, geben Sie Folgendes ein:


; /etc/modprobe.d/nobeep.conf
; /etc/modprobe.d/nobeep.conf
  blacklist pcspkr
  blacklist pcspkr


; Hinweis
: Der Befehl blacklist hat – da er sich mit Aliasen befasst – denselben Nachteil wie der Befehl alias: Das automatische Laden kann verhindert werden, aber das Modul kann weiterhin manuell oder automatisch geladen werden, wenn ein anderes Modul davon abhängt.


; Note
==== install ====
: The blacklist configuration command—as it deals with aliases—has the same drawback as the alias one does: automatic loading can be prevented, but the module still may be loaded manually, or automatically if another module depends on it
Es gibt eine Abhilfe für das in den Hinweisen zu [[#alias]] und [[#blacklist]] beschriebene Verhalten.


==== install ====
* Der Konfigurationsbefehl install weist ''modprobe'' an, einen benutzerdefinierten Befehl auszuführen, anstatt das Modul wie gewohnt in den Kernel einzufügen, sodass Sie das erfolgreiche Laden des Moduls mit folgendem Befehl simulieren können:
There is a workaround for the behaviour described in the [[#alias]] and [[#blacklist]] notes
* The install configuration command instructs ''modprobe'' to run a custom command instead of inserting the module in the kernel as normal, so you can simulate the successful module loading with:


; /etc/modprobe.d/blacklist.conf
; /etc/modprobe.d/blacklist.conf
  install ''module_name'' /bin/true
  install ''module_name'' /bin/true
Mit /bin/false können Sie das Laden des Moduls zwangsweise verhindern: Dadurch wird das Laden des Moduls – und aller anderen davon abhängigen Module – auf alle Fälle verhindert, und es wird möglicherweise eine Fehlermeldung im Protokoll ausgegeben.
=== Verwendung der Kernel-Befehlszeile ===
; Tipp
: Dies kann sehr nützlich sein, wenn ein defektes Modul das Booten Ihres Systems unmöglich macht.
Sie können Module auch über die Konfiguration der Boot-Einträge des [[Boot loader|Bootloaders]] auf die Blacklist setzen
Fügen Sie einfach 1=module_blacklist=''module_name_1'',''module_name_2'',''module_name_3'' zu Ihrer Kernel-Befehlszeile hinzu, wie unter [[Kernel parameters#Boot loader configuration|Kernel-Parameter#Bootloader-Konfiguration]] beschrieben
; Hinweis
* Wenn Sie mehr als ein Modul auf die Blacklist setzen, beachten Sie, dass diese nur durch Kommas getrennt werden
* Leerzeichen oder andere Zeichen können die Syntax vermutlich zerstören
* module_blacklist führt dazu, dass der Kernel das Modul vollständig ablehnt
* Wenn Sie nur das implizite Laden verhindern möchten, das Modul aber später möglicherweise manuell laden möchten, lautet der richtige Parameter 1=modprobe.blacklist=''module_name_1'',''module_name_2'',''module_name_3''
* Dies verhindert jedoch nicht das explizite Laden während des Bootvorgangs, z. B.
* durch [[Linux/Kernel/Module/tmp#systemd|systemd]] oder andere Module


You can force the module to always fail loading with /bin/false: this will effectively prevent the module—and any other that depends on it—from loading by any means, and a log error message may be produced
Ein weiterer Anwendungsfall für eine Befehlszeilenoption ist die Deaktivierung hardwarespezifischer Komponenten eines Moduls, ohne das Modul vollständig zu deaktivieren


=== Using kernel command line ===
* Beispielsweise die Deaktivierung eines Mikrofons unter Beibehaltung anderer Soundausgabeoptionen
; Tip
* Einige Beispiele finden Sie unter BBS#303475.
: This can be very useful if a broken module makes it impossible to boot your system


You can also blacklist modules from the [[boot loader]] boot entry configuration
== Fehlerbehebung ==


Simply add 1=module_blacklist=''module_name_1'',''module_name_2'',''module_name_3'' to your kernel command line, as described in [[Kernel parameters#Boot loader configuration]]
=== Modul wird nicht geladen ===
Wenn ein bestimmtes Modul nicht geladen wird und das Boot-Protokoll (aufrufbar mit journalctl -b als root) angibt, dass das Modul auf der Blacklist steht, aber das Verzeichnis /etc/modprobe.d/ keinen entsprechenden Eintrag enthält, überprüfen Sie ein anderes ''modprobe''-Quellverzeichnis unter /usr/lib/modprobe.d/ auf Blacklist-Einträge.


; Note
Ein Modul wird nicht geladen, wenn die im Kernelmodul enthaltene Zeichenfolge „vermagic“ nicht mit dem Wert des aktuell ausgeführten Kernels übereinstimmt.
* When you are blacklisting more than one module, note that they are separated by commas only
* Spaces or anything else might presumably break the syntax
* module_blacklist will make the kernel completely refuse to load the module
* If you only want to prevent implicit loading, but maybe load the module manually later, the correct parameter is 1=modprobe.blacklist=''module_name_1'',''module_name_2'',''module_name_3''
* This will however not prevent explicit loads during the boot, e.g
* by [[#systemd|systemd]] or other modules


Another use case for a command line option is to disable hardware-specific components of a module without disabling the module entirely
* Wenn bekannt ist, dass das Modul mit dem aktuell ausgeführten Kernel kompatibel ist, kann die „vermagic“-Prüfung mit modprobe --force-vermagic ignoriert werden.
* For example, disabling a microphone while retaining other sound out options
* See [https://bbs.archlinux.org/viewtopic.php?id=303475 BBS#303475] for a few examples


== Troubleshooting ==
; Warnung
=== Module does not load ===
: Das Ignorieren der Versionsprüfungen für ein Kernelmodul kann aufgrund von Inkompatibilitäten zum Absturz des Kernels oder zu undefiniertem Verhalten des Systems führen.
In case a specific module does not load and the boot log (accessible by running journalctl -b as root) says that the module is blacklisted, but the directory /etc/modprobe.d/ does not show a corresponding entry, check another ''modprobe'' source directory at /usr/lib/modprobe.d/ for blacklisting entries


A module will not be loaded if the "vermagic" string contained within the kernel module does not match the value of the currently running kernel
* Verwenden Sie --force-vermagic nur mit äußerster Vorsicht.
* If it is known that the module is compatible with the current running kernel the "vermagic" check can be ignored with modprobe --force-vermagic


; Warning
== Siehe auch ==
: Ignoring the version checks for a kernel module can cause a kernel to crash or a system to exhibit undefined behavior due to incompatibility
* Use --force-vermagic only with the utmost caution


== See also ==
* [[Disable PC speaker beep|PC-Signalton deaktivieren]]
* [[Disable PC speaker beep]]
* Schreiben eines WMI-Treibers – eine Einführung in LWM
* [https://lwn.net/Articles/391230/ Writing a WMI driver] - an LWM introduction


[[Category:Kernel]]
[[Category:Kernel]]
[[Category:Hardware detection and troubleshooting]]
[[Category:Hardware detection and troubleshooting]]
[[Category:Boot process]]
[[Category:Boot process]]

Version vom 1. Mai 2025, 09:32 Uhr

Kernel-Module sind Codeabschnitte, die bei Bedarf in den Kernel geladen und wieder entfernt werden können.

  • Sie erweitern die Funktionalität des Kernels, ohne dass das System neu gestartet werden muss.

Informationen zum Erstellen eines Kernel-Moduls finden Sie unter The Linux Kernel Module Programming Guide

  • Ein Modul kann als integriertes oder ladbares Modul konfiguriert werden.
  • Um ein Modul dynamisch zu laden oder zu entfernen, muss es in der Kernelkonfiguration als ladbares Modul konfiguriert sein (die Zeile, die sich auf das Modul bezieht, wird dann mit dem Buchstaben M angezeigt).

Informationen zum automatischen Neuerstellen eines Kernelmoduls bei der Installation eines neuen Kernels finden Sie unter „Dynamic Kernel Module Support (DKMS)“.

Informationen abrufen

Module hängen in der Regel von der Kernel-Version ab und sind im Verzeichnis /usr/lib/modules/kernel_release/ gespeichert.

Tipp
Führen Sie uname -r (oder uname --kernel-release) aus, um Ihre aktuelle Kernel-Version zu ermitteln.
Hinweis
Modul- und Aliasnamen verwenden häufig Unterstriche (_) oder Bindestriche (-); diese Symbole sind jedoch bei Verwendung des Befehls modprobe und in Konfigurationsdateien in /etc/modprobe.d/ austauschbar (die automatische Umwandlung in Unterstriche erfolgt, siehe 8|modprobe|BESCHREIBUNG und 5|modprobe.d|BESCHREIBUNG).

So zeigen Sie an, welche Kernel-Module derzeit geladen sind

$ lsmod

Um Informationen zu einem Modul anzuzeigen

$ modinfo Modulname

Um die für ein geladenes Modul festgelegten Optionen aufzulisten, verwenden Sie systool aus sysfsutils

$ systool -v -m Modulname

Um die umfassende Konfiguration aller Module anzuzeigen

$ modprobe -c | less

Um die Konfiguration eines bestimmten Moduls anzuzeigen

$ modprobe -c | grep Modulname

Auflisten der Abhängigkeiten eines Moduls (oder Alias), einschließlich des Moduls selbst

$ modprobe --show-depends Modulname

Automatisches Laden von Modulen

Heutzutage wird das Laden aller erforderlichen Module automatisch von udev übernommen. Wenn Sie also keine Kernel-Module außerhalb des Baums verwenden müssen, müssen Sie keine Module, die beim Booten geladen werden sollen, in eine Konfigurationsdatei eintragen

  • Es gibt jedoch Fälle, in denen Sie möglicherweise während des Bootvorgangs ein zusätzliches Modul laden oder ein anderes Modul auf die Blacklist setzen möchten, damit Ihr Computer ordnungsgemäß funktioniert

Frühes Laden von Modulen

Das frühe Laden von Modulen hängt vom verwendeten initramfs-Generator ab

Hinweis
Das initramfs-Image enthält möglicherweise nicht die in /etc/modules-load.d/ angeforderten Kernel-Module, außerdem können Dateien fehlen, die in diesem Ordner festgelegt wurden (siehe #systemd).

systemd

Kernel-Module können explizit in Dateien unter /etc/modules-load.d/ aufgeführt werden, damit systemd sie beim Booten lädt.

  • Jede Konfigurationsdatei wird im Stil von /etc/modules-load.d/program.conf benannt.
  • Konfigurationsdateien enthalten lediglich eine Liste der zu ladenden Kernel-Modulnamen, getrennt durch Zeilenumbrüche.
  • Leere Zeilen und Zeilen, deren erstes Nicht-Leerzeichen # oder ; ist, werden ignoriert.
/etc/modules-load.d/virtio-net.conf
# virtio_net.ko beim Booten laden
virtio_net

Weitere Informationen finden Sie unter modules-load.d.

Manuelle Modulverwaltung

Kernel-Module werden von Tools aus dem Paket kmod verwaltet, das als Abhängigkeit eines Kernel-Pakets installiert wird.

  • Sie können diese Tools manuell verwenden.
  • So laden Sie ein Modul:
# modprobe Modulname
Hinweis
Wenn Sie Ihren Kernel aktualisiert, aber noch nicht neu gestartet haben, schlägt modprobe ohne Fehlermeldung mit dem Code 1 fehl, da der Pfad /usr/lib/modules/kernel_release/ nicht mehr existiert.
  • Überprüfen Sie manuell, ob dieser Pfad existiert, wenn modprobe fehlgeschlagen ist, um festzustellen, ob dies der Fall ist

Um ein Modul über einen Dateinamen zu laden, d. h.

  • eines, das nicht im Verzeichnis /usr/lib/modules/kernel_release/ installiert ist, verwenden Sie einen der folgenden Befehle:
# insmod Dateiname Moduloptionen
# modprobe Dateiname

Um ein Modul zu entladen (entfernen), verwenden Sie einen der folgenden Befehle:

# rmmod Modulname
# modprobe -r Modulname
# modprobe --remove Modulname

Moduloptionen festlegen

Um einen Parameter an ein Kernelmodul zu übergeben, können Sie ihn manuell mit modprobe übergeben oder sicherstellen, dass bestimmte Parameter immer angewendet werden, indem Sie eine modprobe-Konfigurationsdatei verwenden oder den Kernel-Befehlszeilenparameter

  • Wenn das Modul in den Kernel integriert ist, muss die Kernel-Befehlszeile verwendet werden, andere Methoden funktionieren nicht.

modprobe verwenden

Die grundlegende Methode zum Übergeben von Parametern an ein Modul ist die Verwendung des Befehls modprobe

  • Parameter werden in der Befehlszeile mit einfachen 1=Schlüssel=Wert-Zuweisungen angegeben:
# modprobe Modulname Parametername=Parameterwert

Verwendung von modprobe.d

Konfigurationsdateien im Verzeichnis /etc/modprobe.d/ können verwendet werden, um Moduleinstellungen an udev zu übergeben, das modprobe verwendet, um das Laden der Module während des Systemstarts zu verwalten

  • Dateien in diesem Verzeichnis können beliebige Namen haben, sofern sie die Erweiterung .conf haben.
  • Der Dateiname ist wichtig, siehe 5|modprobe.d|KONFIGURATIONSDIREKTORIES UND PRIORITÄTEN
  • So zeigen Sie die effektive Konfiguration an:
$ systemd-analyze cat-config modprobe.d

Die Syntax lautet:

/etc/modprobe.d/Dateiname.conf
Optionen Modulname Parametername=Parameterwert
Hinweis
Alle Optionen für ein bestimmtes Modul müssen in einer einzigen Zeile definiert werden.
  • Eine neue Optionszeile mit demselben Modulnamen ersetzt die vorherige.

Mehrere Modulparameter werden durch Leerzeichen getrennt, ein Parameter kann wiederum eine Liste von Werten erhalten, die durch Kommas getrennt sind:

/etc/modprobe.d/Dateiname.conf
Optionen Modulname param1=Wert1 param2=Wert2a,Wert2b …
Beispiel

/etc/modprobe.d/thinkfan.conf

# Auf ThinkPads kann damit der Daemon „thinkfan“ die Lüftergeschwindigkeit steuern.
options thinkpad_acpi fan_control=1
Hinweis
Wenn eines der betroffenen Module aus dem initramfs geladen wird, müssen Sie die entsprechende .conf-Datei zu FILES in mkinitcpio.conf hinzufügen oder den modconf-Hook verwenden und dann das initramfs neu generieren, um die .conf-Datei einzubinden.
  • Um den Inhalt des Standard-initramfs anzuzeigen, verwenden Sie lsinitcpio.

Verwendung der Kernel-Befehlszeile

Sie können Optionen auch über die Kernel-Befehlszeile an das Modul übergeben

  • Dies ist die einzige funktionierende Option für Module, die in den Kernel integriert sind.
  • Für alle gängigen Bootloader ist die folgende Syntax korrekt:
Modulname.Parametername=Parameterwert
Beispiel
thinkpad_acpi.fan_control=1

Fügen Sie dies einfach in die entsprechende Zeile Ihrer Bootloader-Konfiguration ein, wie unter Kernel-Parameter#Bootloader-Konfiguration beschrieben.

Aliasing

Aliase sind alternative Namen für ein Modul.

  • Beispiel: alias my-mod really_long_modulename bedeutet, dass Sie modprobe my-mod anstelle von modprobe really_long_modulename verwenden können
  • Sie können auch Shell-ähnliche Platzhalter verwenden, sodass alias my-mod* really_long_modulename bedeutet, dass modprobe my-mod-something denselben Effekt hat
  • Erstellen Sie einen Alias:
/etc/modprobe.d/myalias.conf
alias my-mod really_long_module_name

Aliase können intern sein – also im Modul selbst enthalten

  • Interne Aliase werden in der Regel für das #Automatische Laden von Modulen verwendet, wenn dies von einer Anwendung benötigt wird, z. B.
  • wenn der Kernel ein neues Gerät erkennt

So zeigen Sie die internen Aliase des Moduls an

$ modinfo --field=alias module_name

So zeigen Sie sowohl konfigurierte als auch interne Aliase an

$ modprobe --showconfig | grep '\<module_name$'

Blacklist

Blacklisting ist im Zusammenhang mit Kernel-Modulen ein Mechanismus, der das Laden des Kernel-Moduls verhindert

  • Dies kann beispielsweise nützlich sein, wenn die zugehörige Hardware nicht benötigt wird oder wenn das Laden dieses Moduls Probleme verursacht: Es kann beispielsweise zwei Kernel-Module geben, die versuchen, dieselbe Hardware zu steuern, und deren gleichzeitiges Laden zu einem Konflikt führen würde.
Tipp
Verwechseln Sie den Blacklisting als Oberbegriff nicht mit der Verwendung des Schlüsselworts blacklist als Sonderfall des Blacklistings.

Einige Module werden als Teil des initramfs geladen.

  • mkinitcpio -M gibt alle automatisch erkannten Module aus: Um zu verhindern, dass initramfs einige dieser Module lädt, setzen Sie sie in einer .conf-Datei unter /etc/modprobe.d auf die Blacklist, und sie werden beim Erstellen des Images durch den modconf-Hook hinzugefügt.
  • Mit mkinitcpio -v werden alle Module aufgelistet, die von den verschiedenen Hooks (z. B.
  • Dateisystem-Hook, Block-Hook, und weitere)
  • Denken Sie daran, diese .conf-Datei zum FILES-Array in /etc/mkinitcpio.conf hinzuzufügen, wenn Sie den modconf-Hook nicht in Ihrem HOOKS-Array haben (z. B.
  • Sie von der Standardkonfiguration abgewichen sind), und nachdem Sie die Module auf die Blacklist gesetzt haben, generieren Sie das initramfs neu und starten Sie anschließend neu.

Verwendung von modprobe.d

alias

Deaktivieren Sie einen alias, indem Sie ihn überschreiben.

  • Um beispielsweise zu verhindern, dass das Bluetooth-Modul automatisch geladen wird, entfernen Sie den Modulnamen, der nicht existiert:
/etc/modprobe.d/modprobe.conf
alias net-pf-31 off
Hinweis
Das Überschreiben von Aliasnamen kann das automatische Laden von Modulen verhindern, aber das Modul kann weiterhin – sowohl automatisch als auch manuell – über einen anderen Aliasnamen oder den Modulnamen geladen werden.

blacklist

Um alle internen Aliasnamen für ein bestimmtes Modul zu deaktivieren, verwenden Sie das Schlüsselwort blacklist

  • Um beispielsweise zu verhindern, dass das Modul pcspkr beim Booten geladen wird und Töne über den PC-Lautsprecher ausgibt, geben Sie Folgendes ein:
/etc/modprobe.d/nobeep.conf
blacklist pcspkr
Hinweis
Der Befehl blacklist hat – da er sich mit Aliasen befasst – denselben Nachteil wie der Befehl alias: Das automatische Laden kann verhindert werden, aber das Modul kann weiterhin manuell oder automatisch geladen werden, wenn ein anderes Modul davon abhängt.

install

Es gibt eine Abhilfe für das in den Hinweisen zu #alias und #blacklist beschriebene Verhalten.

  • Der Konfigurationsbefehl install weist modprobe an, einen benutzerdefinierten Befehl auszuführen, anstatt das Modul wie gewohnt in den Kernel einzufügen, sodass Sie das erfolgreiche Laden des Moduls mit folgendem Befehl simulieren können:
/etc/modprobe.d/blacklist.conf
install module_name /bin/true

Mit /bin/false können Sie das Laden des Moduls zwangsweise verhindern: Dadurch wird das Laden des Moduls – und aller anderen davon abhängigen Module – auf alle Fälle verhindert, und es wird möglicherweise eine Fehlermeldung im Protokoll ausgegeben.

Verwendung der Kernel-Befehlszeile

Tipp
Dies kann sehr nützlich sein, wenn ein defektes Modul das Booten Ihres Systems unmöglich macht.

Sie können Module auch über die Konfiguration der Boot-Einträge des Bootloaders auf die Blacklist setzen

Fügen Sie einfach 1=module_blacklist=module_name_1,module_name_2,module_name_3 zu Ihrer Kernel-Befehlszeile hinzu, wie unter Kernel-Parameter#Bootloader-Konfiguration beschrieben

Hinweis
  • Wenn Sie mehr als ein Modul auf die Blacklist setzen, beachten Sie, dass diese nur durch Kommas getrennt werden
  • Leerzeichen oder andere Zeichen können die Syntax vermutlich zerstören
  • module_blacklist führt dazu, dass der Kernel das Modul vollständig ablehnt
  • Wenn Sie nur das implizite Laden verhindern möchten, das Modul aber später möglicherweise manuell laden möchten, lautet der richtige Parameter 1=modprobe.blacklist=module_name_1,module_name_2,module_name_3
  • Dies verhindert jedoch nicht das explizite Laden während des Bootvorgangs, z. B.
  • durch systemd oder andere Module

Ein weiterer Anwendungsfall für eine Befehlszeilenoption ist die Deaktivierung hardwarespezifischer Komponenten eines Moduls, ohne das Modul vollständig zu deaktivieren

  • Beispielsweise die Deaktivierung eines Mikrofons unter Beibehaltung anderer Soundausgabeoptionen
  • Einige Beispiele finden Sie unter BBS#303475.

Fehlerbehebung

Modul wird nicht geladen

Wenn ein bestimmtes Modul nicht geladen wird und das Boot-Protokoll (aufrufbar mit journalctl -b als root) angibt, dass das Modul auf der Blacklist steht, aber das Verzeichnis /etc/modprobe.d/ keinen entsprechenden Eintrag enthält, überprüfen Sie ein anderes modprobe-Quellverzeichnis unter /usr/lib/modprobe.d/ auf Blacklist-Einträge.

Ein Modul wird nicht geladen, wenn die im Kernelmodul enthaltene Zeichenfolge „vermagic“ nicht mit dem Wert des aktuell ausgeführten Kernels übereinstimmt.

  • Wenn bekannt ist, dass das Modul mit dem aktuell ausgeführten Kernel kompatibel ist, kann die „vermagic“-Prüfung mit modprobe --force-vermagic ignoriert werden.
Warnung
Das Ignorieren der Versionsprüfungen für ein Kernelmodul kann aufgrund von Inkompatibilitäten zum Absturz des Kernels oder zu undefiniertem Verhalten des Systems führen.
  • Verwenden Sie --force-vermagic nur mit äußerster Vorsicht.

Siehe auch