Kernelmodule: Unterschied zwischen den Versionen
Jewox (Diskussion | Beiträge) |
|||
(7 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
*Damit ein | *Damit ein Kernelmodul als solches vorhanden ist, muss es als Modul kompiliert werden. Die entsprechende Zeile in der Kernelkonfiguration ist mit einem "M" markiert. | ||
*Die Module liegen in ''/lib/modules/<kernel_release>'' (mit "uname -r" kann man sich das Release des gerade laufenden Kernels anzeigen lassen) | *Die Module liegen in ''/lib/modules/<kernel_release>'' (mit "uname -r" kann man sich das Release des gerade laufenden Kernels anzeigen lassen) | ||
*Mit ''/sbin/modprobe'' kann man Module laden und entladen | *Mit ''/sbin/modprobe'' kann man Module laden und entladen | ||
*Im Verzeichnis ''/etc/modprobe.d/'' können über Dateien mit der Endung .conf zusätzliche | *Im Verzeichnis ''/etc/modprobe.d/'' können über Dateien mit der Endung .conf zusätzliche Moduloptionen gehandhabt werden. Auch [[Udev]] lädt die Module mit Hilfe von ''modprobe''. | ||
Zeile 8: | Zeile 8: | ||
== Module beim Systemstart automatisch laden == | == Module beim Systemstart automatisch laden == | ||
Die meisten benötigten Module werden beim Systemstart vom Init System erkannt und automatisch geladen. Es kann allerdings vorkommen, dass einige Module nicht automatisch erkannt werden. Sollen diese dennoch bei jedem Systemstart geladen | Die meisten benötigten Module werden beim Systemstart vom Init System erkannt und automatisch geladen. Es kann allerdings vorkommen, dass einige Module nicht automatisch erkannt werden. Sollen diese dennoch bei jedem Systemstart geladen werden, müssen sie in eine Datei mit der Endung <code>.conf</code> im Verzeichnis <code>/etc/modules-load.d/</code> eingetragen werden. Der Name der Datei ist frei wählbar, sie muss nur die Endung <code>.conf</code> haben. Zum Beispiel <code>/etc/modules-load.d/my-modules.conf</code>. Die zu ladenden Module werden zeilenweise in diese Datei eingetragen. | ||
/etc/modules-load.d/my-modules.conf | /etc/modules-load.d/my-modules.conf | ||
Zeile 18: | Zeile 18: | ||
== Informationen über Module anzeigen == | == Informationen über Module anzeigen == | ||
*Anzeigen welche | *Anzeigen welche Kernelmodule geladen sind | ||
$ lsmod | $ lsmod | ||
*Informationen über ein bestimmtes Modul anzeigen | *Informationen über ein bestimmtes Modul anzeigen | ||
$ modinfo ''modul_name'' | $ modinfo ''modul_name'' | ||
*Abhängigkeiten eines Moduls (oder Aliases) anzeigen | *Abhängigkeiten eines Moduls (oder Aliases) anzeigen | ||
$ modprobe --show- | $ modprobe --show-depends ''modul_name'' | ||
*gesetzte Optionen eines geladenen Moduls anzeigen | *gesetzte Optionen eines geladenen Moduls anzeigen | ||
$ systool -v -m ''modul_name'' | $ systool -v -m ''modul_name'' | ||
Zeile 31: | Zeile 31: | ||
$ modprobe -c | less | $ modprobe -c | less | ||
Konfiguration eines bestimmten Moduls anzeigen | Konfiguration eines bestimmten Moduls anzeigen | ||
$ modprobe - c | grep ''module_name'' | $ modprobe -c | grep ''module_name'' | ||
== Parameter == | == Parameter == | ||
Das folgende | Das folgende Bashscript gibt eine Liste aller momentan geladenen Module, deren Parameter und aktuellen Werte der Parameter aus. Es nutzt ''/proc/modules'' um eine Liste aller momentan geladenen Module zu erhalten, greift dann mit ''modinfo'' direkt auf das Verzeichnis zu um eine Beschreibung der Module und deren Parameter (falls vorhanden) zu erhalten. Abschließend greift es auf das sysfs Dateisystem zu um die aktuellen Werte der Parameter zu erhalten. Es muss als root ausgeführt werden. | ||
function aa_mod_parameters () | function aa_mod_parameters () | ||
{ | { | ||
Zeile 96: | Zeile 96: | ||
== Optionen == | == Optionen == | ||
Um ein | Um ein Kernelmodul mit bestimmten Parametern zu laden, können Konfigurationsdateien in ''/etc/modprobe.conf/'' oder die Kernel Kommandozeile verwendet werden. | ||
=== Konfigurationsdateien === | === Konfigurationsdateien === | ||
Zeile 108: | Zeile 108: | ||
=== Kernel Kommandozeile === | === Kernel Kommandozeile === | ||
Optionen können auch über die Kernel Kommandozeile (z.B. in [[GRUB]] oder [[Syslinux]]) an Module übergeben werden. Falls ein Modul fest in den Kernel kompiliert ist muss diese Methode zum Beispiel angewandt werden. Die Syntax sieht so aus: | Optionen können auch über die Kernel-Kommandozeile (z.B. in [[GRUB]] oder [[Syslinux]]) an Module übergeben werden. Falls ein Modul fest in den Kernel kompiliert ist muss diese Methode zum Beispiel angewandt werden. Die Syntax sieht so aus: | ||
modul_name.parametername=parmetercontents | modul_name.parametername=parmetercontents | ||
Beispiel: | Beispiel: | ||
Zeile 119: | Zeile 119: | ||
alias mymod really_long_module_name | alias mymod really_long_module_name | ||
Manche Module haben Aliase die genutzt werden um sie automatisch zu laden wenn eine Anwendung sie benötigt. Deaktivieren dieser aliase kann das | Manche Module haben Aliase die genutzt werden um sie automatisch zu laden wenn eine Anwendung sie benötigt. Deaktivieren dieser aliase kann das automatische Laden unterbinden, die Module können aber immer noch manuell geladen werden. | ||
/etc/modprobe.d/modprobe.conf | /etc/modprobe.d/modprobe.conf | ||
Zeile 129: | Zeile 129: | ||
== Blacklisting == | == Blacklisting == | ||
Im Zusammenhang mit | Im Zusammenhang mit Kernelmodulen bezeichnet Blacklisting den Mechanismus den Kernel daran zu hindern bestimmte Module zu laden. Das kann zum Beispiel nützlich sein wenn die betreffende Hardware gar nicht vorhanden ist oder das Laden eines Moduls Probleme verursacht. Es kann zum Beispiel vorkommen, dass zwei verschiedene Module für eine Hardwarekomponente existieren, aber das Laden beider zu Konflikten führt. | ||
Einige Module werden als Teil des initramfs geladen. ''mkinitcpio -M'' gibt alle automatisch erkannten Module aus. Um zu verhindern dass Module aus dem initramfs geladen werden, müssen sie in ''/etc/modprobe.d/modprobe.conf'' geblacklistet werden. ''mkinitcpio -v'' gibt alle Module die von den verschiedenen HOOKS geladen werden aus. Nachdem Module aus dem initramfs geblacklisted wurden, muss das | Einige Module werden als Teil des initramfs geladen. ''mkinitcpio -M'' gibt alle automatisch erkannten Module aus. Um zu verhindern dass Module aus dem initramfs geladen werden, müssen sie in ''/etc/modprobe.d/modprobe.conf'' geblacklistet werden. ''mkinitcpio -v'' gibt alle Module die von den verschiedenen HOOKS geladen werden aus. Nachdem Module aus dem initramfs geblacklisted wurden, muss das initramfs neu generiert und der Rechner neu gestartet werden. | ||
=== per | === per Konfigurationsdateien === | ||
In ''/etc/modprobe.conf.d/ muss eine Datei mit der Endung .conf erstellt werden (z.B. blacklist.conf). In dieser Datei muss für jedes Modul eine Zeile mit folgender Syntax eingefügt werden. Soll zum Beispiel verhindert werden, dass das pcspkr Modul geladen wird: | In ''/etc/modprobe.conf.d/ muss eine Datei mit der Endung .conf erstellt werden (z.B. blacklist.conf). In dieser Datei muss für jedes Modul eine Zeile mit folgender Syntax eingefügt werden. Soll zum Beispiel verhindert werden, dass das pcspkr Modul geladen wird: | ||
/etc/modprobe.d/blacklist.conf | /etc/modprobe.d/blacklist.conf | ||
Zeile 139: | Zeile 139: | ||
blacklist pcspkr | blacklist pcspkr | ||
{{Hinweis| Das blacklist Kommando verhindert nur das automatische | {{Hinweis| Das blacklist Kommando verhindert nur das automatische Laden eines Moduls. Es kann aber trotzdem noch geladen werden wenn ein anderes, nicht geblacklistetes, Modul es als Abhängigkeit benötigt. | ||
Um das | Um das Laden eines Moduls komplett zu unterbinden gibt es einen Workaround: | ||
/etc/modprobe.d/blacklist.conf | /etc/modprobe.d/blacklist.conf | ||
Zeile 147: | Zeile 147: | ||
install ''modul_name'' /bin/false | install ''modul_name'' /bin/false | ||
... | ... | ||
Das verhindert effektiv, | Das verhindert effektiv, dass das Modul und alle anderen die von ihm Abhängen geladen werden.}} | ||
=== per Kernel Kommandozeile === | === per Kernel Kommandozeile === | ||
Module können auch über die Kernel Kommandozeile des Bootloaders geblacklistet werden. | Module können auch über die Kernel-Kommandozeile des Bootloaders geblacklistet werden. | ||
modprobe.blacklist=modul_name1,modul_name2,modul_name3 | modprobe.blacklist=modul_name1,modul_name2,modul_name3 | ||
oder | oder | ||
Zeile 175: | Zeile 175: | ||
[[Kategorie:Konfiguration]] | [[Kategorie:Konfiguration]] | ||
[[Kategorie:Hardware]] | [[Kategorie:Hardware]] | ||
[[en:Kernel module]] |
Aktuelle Version vom 26. Dezember 2023, 11:52 Uhr
- Damit ein Kernelmodul als solches vorhanden ist, muss es als Modul kompiliert werden. Die entsprechende Zeile in der Kernelkonfiguration ist mit einem "M" markiert.
- Die Module liegen in /lib/modules/<kernel_release> (mit "uname -r" kann man sich das Release des gerade laufenden Kernels anzeigen lassen)
- Mit /sbin/modprobe kann man Module laden und entladen
- Im Verzeichnis /etc/modprobe.d/ können über Dateien mit der Endung .conf zusätzliche Moduloptionen gehandhabt werden. Auch Udev lädt die Module mit Hilfe von modprobe.
Hinweis: Modul Namen enthalten oft Unterstriche "_" oder Minuszeichen "-". Bei der Verwendung von modprobe und in den Konfigurationsdateien in /etc/modprobe.d/ sind diese beiden Zeichen austauschbar.
Module beim Systemstart automatisch laden
Die meisten benötigten Module werden beim Systemstart vom Init System erkannt und automatisch geladen. Es kann allerdings vorkommen, dass einige Module nicht automatisch erkannt werden. Sollen diese dennoch bei jedem Systemstart geladen werden, müssen sie in eine Datei mit der Endung .conf
im Verzeichnis /etc/modules-load.d/
eingetragen werden. Der Name der Datei ist frei wählbar, sie muss nur die Endung .conf
haben. Zum Beispiel /etc/modules-load.d/my-modules.conf
. Die zu ladenden Module werden zeilenweise in diese Datei eingetragen.
/etc/modules-load.d/my-modules.conf modulname1 modulname2 modulname3 usw.
Informationen über Module anzeigen
- Anzeigen welche Kernelmodule geladen sind
$ lsmod
- Informationen über ein bestimmtes Modul anzeigen
$ modinfo modul_name
- Abhängigkeiten eines Moduls (oder Aliases) anzeigen
$ modprobe --show-depends modul_name
- gesetzte Optionen eines geladenen Moduls anzeigen
$ systool -v -m modul_name
Konfiguration
Die gesamte Konfiguration aller Module anzeigen
$ modprobe -c | less
Konfiguration eines bestimmten Moduls anzeigen
$ modprobe -c | grep module_name
Parameter
Das folgende Bashscript gibt eine Liste aller momentan geladenen Module, deren Parameter und aktuellen Werte der Parameter aus. Es nutzt /proc/modules um eine Liste aller momentan geladenen Module zu erhalten, greift dann mit modinfo direkt auf das Verzeichnis zu um eine Beschreibung der Module und deren Parameter (falls vorhanden) zu erhalten. Abschließend greift es auf das sysfs Dateisystem zu um die aktuellen Werte der Parameter zu erhalten. Es muss als root ausgeführt werden.
function aa_mod_parameters () { N=/dev/null; C=`tput op` O=$(echo -en "\n`tput setaf 2`>>> `tput op`"); for mod in $(cat /proc/modules|cut -d" " -f1); do md=/sys/module/$mod/parameters; [[ ! -d $md ]] && continue; m=$mod; d=`modinfo -d $m 2>$N | tr "\n" "\t"`; echo -en "$O$m$C"; [[ ${#d} -gt 0 ]] && echo -n " - $d"; echo; for mc in $(cd $md; echo *); do de=`modinfo -p $mod 2>$N | grep ^$mc 2>$N|sed "s/^$mc=//" 2>$N`; echo -en "\t$mc=`cat $md/$mc 2>$N`"; [[ ${#de} -gt 1 ]] && echo -en " - $de"; echo; done; done }
Eine Beispielausgabe:
# aa_mod_parameters >>> ehci_hcd - USB 2.0 'Enhanced' Host Controller (EHCI) Driver hird=0 - hird:host initiated resume duration, +1 for each 75us (int) ignore_oc=N - ignore_oc:ignore bogus hardware overcurrent indications (bool) log2_irq_thresh=0 - log2_irq_thresh:log2 IRQ latency, 1-64 microframes (int) park=0 - park:park setting; 1-3 back-to-back async packets (uint) >>> processor - ACPI Processor Driver ignore_ppc=-1 - ignore_ppc:If the frequency of your machine gets wronglylimited by BIOS, this should help (int) ignore_tpc=0 - ignore_tpc:Disable broken BIOS _TPC throttling support (int) latency_factor=2 - latency_factor: (uint) >>> usb_storage - USB Mass Storage driver for Linux delay_use=1 - delay_use:seconds to delay before using a new device (uint) option_zero_cd=1 - option_zero_cd:ZeroCD mode (1=Force Modem (default), 2=Allow CD-Rom (uint) quirks= - quirks:supplemental list of device IDs and their quirks (string) swi_tru_install=1 - swi_tru_install:TRU-Install mode (1=Full Logic (def), 2=Force CD-Rom, 3=Force Modem) (uint) >>> video - ACPI Video Driver allow_duplicates=N - allow_duplicates: (bool) brightness_switch_enabled=Y - brightness_switch_enabled: (bool) use_bios_initial_backlight=Y - use_bios_initial_backlight: (bool)
Laden
Modul inklusive benötigter Abhängigkeiten (nach)laden.
# modprobe modul_name
Nur das angegebene Modul, ohne Abhängigkeiten (nicht zu empfehlen) laden.
# insmod modul_name
Entfernen
Modul inklusive Abhängigkeiten entfernen.
# modprobe -r modul_name
Nur das angegeben Modul entfernen. Evtl. nicht mehr benötigte andere Module werden nicht entfernt.
# rmmod modul_name
Optionen
Um ein Kernelmodul mit bestimmten Parametern zu laden, können Konfigurationsdateien in /etc/modprobe.conf/ oder die Kernel Kommandozeile verwendet werden.
Konfigurationsdateien
Um Modulen Optionen mit modprobe Konfigurationsdateien zu übergeben, muss in /etc/modprobe.d/ eine Datei mit der Endung .conf angelegt werden (es kann aber auch /etc/modprobe.d/modprobe.conf verwendet werden). Die Syntax sieht so aus:
options modul_name parametername=parametercontents
Beispiel:
/etc/modprobe.d/thinkfan.conf # On thinkpads, this lets the thinkfan daemon control fan speed options thinkpad_acpi fan_control=1
Kernel Kommandozeile
Optionen können auch über die Kernel-Kommandozeile (z.B. in GRUB oder Syslinux) an Module übergeben werden. Falls ein Modul fest in den Kernel kompiliert ist muss diese Methode zum Beispiel angewandt werden. Die Syntax sieht so aus:
modul_name.parametername=parmetercontents
Beispiel:
thinkpad_acpi.fan_control=1
Aliase
/etc/modprobe.d/myalias.conf # Lets you use 'mymod' in MODULES, instead of 'really_long_module_name' alias mymod really_long_module_name
Manche Module haben Aliase die genutzt werden um sie automatisch zu laden wenn eine Anwendung sie benötigt. Deaktivieren dieser aliase kann das automatische Laden unterbinden, die Module können aber immer noch manuell geladen werden.
/etc/modprobe.d/modprobe.conf # Prevent autoload of bluetooth alias net-pf-31 off # Prevent autoload of ipv6 alias net-pf-10 off
Blacklisting
Im Zusammenhang mit Kernelmodulen bezeichnet Blacklisting den Mechanismus den Kernel daran zu hindern bestimmte Module zu laden. Das kann zum Beispiel nützlich sein wenn die betreffende Hardware gar nicht vorhanden ist oder das Laden eines Moduls Probleme verursacht. Es kann zum Beispiel vorkommen, dass zwei verschiedene Module für eine Hardwarekomponente existieren, aber das Laden beider zu Konflikten führt.
Einige Module werden als Teil des initramfs geladen. mkinitcpio -M gibt alle automatisch erkannten Module aus. Um zu verhindern dass Module aus dem initramfs geladen werden, müssen sie in /etc/modprobe.d/modprobe.conf geblacklistet werden. mkinitcpio -v gibt alle Module die von den verschiedenen HOOKS geladen werden aus. Nachdem Module aus dem initramfs geblacklisted wurden, muss das initramfs neu generiert und der Rechner neu gestartet werden.
per Konfigurationsdateien
In /etc/modprobe.conf.d/ muss eine Datei mit der Endung .conf erstellt werden (z.B. blacklist.conf). In dieser Datei muss für jedes Modul eine Zeile mit folgender Syntax eingefügt werden. Soll zum Beispiel verhindert werden, dass das pcspkr Modul geladen wird:
/etc/modprobe.d/blacklist.conf blacklist pcspkr
Hinweis: Das blacklist Kommando verhindert nur das automatische Laden eines Moduls. Es kann aber trotzdem noch geladen werden wenn ein anderes, nicht geblacklistetes, Modul es als Abhängigkeit benötigt. Um das Laden eines Moduls komplett zu unterbinden gibt es einen Workaround: /etc/modprobe.d/blacklist.conf ... install modul_name /bin/false ... Das verhindert effektiv, dass das Modul und alle anderen die von ihm Abhängen geladen werden.
per Kernel Kommandozeile
Module können auch über die Kernel-Kommandozeile des Bootloaders geblacklistet werden.
modprobe.blacklist=modul_name1,modul_name2,modul_name3
oder
modul_name.disable=1
GRUB Beispiele
/boot/grub/menu.lst ... kernel /vmlinuz-linux root=/dev/sda1 modprobe.blacklist=pcspkr,ipv6 ro ...
/boot/grub/menu.lst ... kernel /vmlinuz-linux root=/dev/sda1 pcspkr.disable=1 ipv6.disable=1 ro ...