Zum Inhalt springen

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

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „–“ durch „-“
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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
'''Linux/Kernel/Module/Anwendung'''
* 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]
== Beschreibung ==
* A module can be configured as built-in or loadable
Kernel-Module sind Codeabschnitte, die bei Bedarf in den Kernel geladen und wieder entfernt werden können.
* 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)
* Sie erweitern die Funktionalität des Kernels, ohne dass das System neu gestartet werden muss.
* 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).


To rebuild a kernel module automatically when a new kernel is installed, see [[Dynamic Kernel Module Support]] (DKMS)
Informationen zum automatischen Neuerstellen eines Kernelmoduls bei der Installation eines neuen Kernels finden Sie unter „[[Dynamic Kernel Module Support]] (DKMS)“.


== Obtaining information ==
== Informationen abrufen ==
Usually modules depend on the kernel release and are stored in the /usr/lib/modules/''kernel_release''/ directory
Module hängen in der Regel von der Kernel-Version ab und sind im Verzeichnis /usr/lib/modules/''kernel_release''/ gespeichert.


; Tip
; Tipp
: Run uname -r (or uname --kernel-release) to get your current kernel release
: Führen Sie uname -r (oder uname --kernel-release) aus, um Ihre aktuelle Kernel-Version zu ermitteln.


; Note
; Hinweis
: 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)
: 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 show what kernel modules are currently loaded
So zeigen Sie an, welche Kernel-Module derzeit geladen sind
  $ lsmod
  $ lsmod
 
Um Informationen zu einem Modul anzuzeigen
To show information about a module
  $ modinfo ''Modulname''
  $ modinfo ''module_name''
Um die für ein geladenes Modul festgelegten Optionen aufzulisten, verwenden Sie systool aus [[sysfsutils]]
 
  $ systool -v -m ''Modulname''
To list the options that are set for a loaded module use systool from [[sysfsutils]]
Um die umfassende Konfiguration aller Module anzuzeigen
  $ systool -v -m ''module_name''
 
To display the comprehensive configuration of all the modules
  $ 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''


See [[modules-load.d]] for more details
# modprobe ''Dateiname''
Um ein Modul zu entladen (''entfernen''), verwenden Sie einen der folgenden Befehle:
# rmmod ''Modulname''


== Manual module handling ==
  # modprobe -r ''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
# modprobe --remove ''Modulname''
: 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
* 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
== Moduloptionen ==
* one that is not installed in the /usr/lib/modules/''kernel_release''/ directory—use any of:
; Moduloptionen festlegen
# insmod ''file_name'' ''module_options''
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]]
# modprobe ''file_name''


To unload—''remove''—a module, use any of:
* Wenn das Modul in den Kernel integriert ist, muss die Kernel-Befehlszeile verwendet werden, andere Methoden funktionieren nicht.
# rmmod ''module_name''
# modprobe -r ''module_name''
# modprobe --remove ''module_name''


== Setting module options ==
=== modprobe verwenden ===
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]]
Die grundlegende Methode zum Übergeben von Parametern an ein Modul ist die Verwendung des Befehls ''modprobe''
* If the module is built into the kernel, the kernel command line must be used and other methods will not work


=== Using modprobe ===
Parameter werden in der Befehlszeile mit einfachen 1=''Schlüssel''=''Wert''-Zuweisungen angegeben:
The basic way to pass parameters to a module is using the ''modprobe'' command
  # modprobe ''Modulname'' ''Parametername''=''Parameterwert''
* 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
* Dateien in diesem Verzeichnis können beliebige Namen haben, sofern sie die Erweiterung ''.conf'' haben.
* The file name matters, see 5|modprobe.d|CONFIGURATION DIRECTORIES AND PRECEDENCE
* Der Dateiname ist wichtig, siehe 5|modprobe.d|KONFIGURATIONSDIREKTORIES UND PRIORITÄTEN
* To show the effective configuration:


So zeigen Sie die effektive Konfiguration an:
  $ systemd-analyze cat-config modprobe.d
  $ systemd-analyze cat-config modprobe.d


The syntax is:
; Syntax
; /etc/modprobe.d/''file_name''.conf
/etc/modprobe.d/''Dateiname''.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
* Eine neue Optionszeile mit demselben Modulnamen ersetzt die vorherige.


Multiple module parameters are separated by spaces, in turn a parameter can receive a list of values which is separated by commas:
Mehrere Modulparameter werden durch Leerzeichen getrennt, ein Parameter kann wiederum eine Liste von Werten erhalten, die durch Kommas getrennt sind:


; /etc/modprobe.d/''file_name''.conf
; /etc/modprobe.d/''Dateiname''.conf
  options ''module_name param1=value1 param2=value2a,value2b …''
  Optionen ''Modulname param1=Wert1 param2=Wert2a,Wert2b …''


; For example
; Beispiel
/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]].


=== Using kernel command line ===
=== Verwendung der Kernel-Befehlszeile ===
You can also pass options to the module using the kernel command line
Sie können Optionen auch über die Kernel-Befehlszeile an das Modul übergeben
* This is the only working option for modules built into the kernel
* Dies ist die einzige funktionierende Option für Module, die in den Kernel integriert sind.
* For all common [[boot loader]]s, the following syntax is correct:
''module_name.parameter_name=parameter_value''


; For example
Für alle gängigen [[Boot loader|Bootloader]] ist die folgende Syntax korrekt:
''Modulname.Parametername=Parameterwert''
 
; Beispiel
  thinkpad_acpi.fan_control=1
  thinkpad_acpi.fan_control=1


Simply add this to the appropriate line in your boot loader configuration, as described in [[Kernel parameters#Boot loader configuration]]
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.


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


; /etc/modprobe.d/myalias.conf
; Erstellen Sie einen Alias
/etc/modprobe.d/myalias.conf
  alias my-mod really_long_module_name
  alias my-mod really_long_module_name


Aliases can be internal—contained in the module itself
Aliase können intern sein (im Modul selbst enthalten)
* Internal aliases are usually used for [[#Automatic module loading]] when it is needed by an application, e.g
* 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.
* when the kernel detects a new device
* wenn der Kernel ein neues Gerät erkennt


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''


To see both configured and internal aliases
So zeigen Sie sowohl konfigurierte als auch interne Aliase an
  $ modprobe --showconfig | grep '\<''module_name''$'
  $ modprobe --showconfig | grep '\<''module_name''$'


== Blacklisting ==
== Blacklist ==
Blacklisting, in the context of kernel modules, is a mechanism to prevent the kernel module from loading
Blacklisting ist im Zusammenhang mit Kernel-Modulen ein Mechanismus, der das Laden des Kernel-Moduls verhindert
* 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
* 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.


; Tip
; Tipp
: Do not confuse the ''blacklisting'' as a generic term with using the blacklist keyword as a blacklisting [[#blacklist|particular case]]
: Verwechseln Sie den ''Blacklisting'' als Oberbegriff nicht mit der Verwendung des Schlüsselworts blacklist als [[Linux/Kernel/Module/tmp#blacklist|Sonderfall]] des Blacklistings.


Some modules are loaded as part of the [[initramfs]]
Einige Module werden als Teil des [[initramfs]] geladen.
* 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 ===
* 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, [[Regenerate the initramfs|generieren Sie das initramfs neu]] und starten Sie anschließend neu.
 
=== Verwendung von 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 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


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
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


=== Using kernel command line ===
; Hinweis
; Tip
* Wenn Sie mehr als ein Modul auf die Blacklist setzen, beachten Sie, dass diese nur durch Kommas getrennt werden
: This can be very useful if a broken module makes it impossible to boot your system
* 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 also blacklist modules from the [[boot loader]] boot entry configuration
Ein weiterer Anwendungsfall für eine Befehlszeilenoption ist die Deaktivierung hardwarespezifischer Komponenten eines Moduls, ohne das Modul vollständig zu deaktivieren


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]]
* Etwa die Deaktivierung eines Mikrofons unter Beibehaltung anderer Soundausgabeoptionen
* Einige Beispiele finden Sie unter BBS#303475.


; Note
== Fehlerbehebung ==
* 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
=== Modul wird nicht geladen ===
* For example, disabling a microphone while retaining other sound out options
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.
* See [https://bbs.archlinux.org/viewtopic.php?id=303475 BBS#303475] for a few examples


== Troubleshooting ==
Ein Modul wird nicht geladen, wenn die im Kernelmodul enthaltene Zeichenfolge „vermagic“ nicht mit dem Wert des aktuell ausgeführten Kernels übereinstimmt.
=== Module does not load ===
* 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.
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
; Warnung
* If it is known that the module is compatible with the current running kernel the "vermagic" check can be ignored with modprobe --force-vermagic
: 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.


; Warning
* Verwenden Sie --force-vermagic nur mit äußerster Vorsicht.
: 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 ==
== Siehe auch ==
* [[Disable PC speaker beep]]
* Informationen zum Erstellen eines Kernel-Moduls finden Sie im "The Linux Kernel Module Programming Guide"
* [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]]

Aktuelle Version vom 11. Mai 2025, 20:51 Uhr

Linux/Kernel/Module/Anwendung

Beschreibung

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.
  • 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

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
Syntax

/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 (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 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

  • Etwa 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

  • Informationen zum Erstellen eines Kernel-Moduls finden Sie im "The Linux Kernel Module Programming Guide"