Kernelmodule: Unterschied zwischen den Versionen
SiD (Diskussion | Beiträge) Die Seite wurde neu angelegt: „{{inuse|~~~~}} Übersetzung des Artikels im englischen Wiki ist in Arbeit.“ |
SiD (Diskussion | Beiträge) neu |
||
Zeile 1: | Zeile 1: | ||
{{inuse|[[Benutzer:SiD|SiD]] 15:26, 13. Apr. 2012 (CEST)}} | {{inuse|[[Benutzer:SiD|SiD]] 15:26, 13. Apr. 2012 (CEST)}} | ||
*Damit ein Kernel Modul als solches vorhanden ist, muss es als Modul kompiliert werden. Die entsprechende Zeile in der Kernel Konfiguration 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 Modul Optionen 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.}} | |||
== Informationen über Module anzeigen == | |||
*Anzeigen welche Kernel Module geladen sind | |||
$ lsmod | |||
*Informationen über ein bestimmtes Modul anzeigen | |||
$ modinfo ''modul_name'' | |||
*Abhängigkeiten eines Moduls (oder Aliases) anzeigen | |||
$ modprobe --show-deps ''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 Bash Script 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'' direct auf das Verzeichnis zu um eine Beschreibung der Modulen 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'' | |||
Um Module, die nicht automatisch von Udev geladen werden beim Booten zu laden, müssen sie in der [[rc.conf]] eingetragen werden. | |||
== 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 Kernel Modul 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 automatisceh 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 Kernel Modulen bezeichnet Blacklisting den Mechanisumus 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 initrmfs neu generiert und der Rechner neu gestartet werden. | |||
=== per Konkigurationsdateien === | |||
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, das 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 | |||
... | |||
== Weblinks == | |||
* [http://linuxmanpages.com/man5/modprobe.conf.5.php modprobe.conf Man-Page] {{sprache|en}} | |||
* [[IPv6 - Modul deaktivieren]] {{sprache|de}} | |||
[[Kategorie:Konfiguration]] | |||
[[Kategorie:Hardware]] |
Version vom 13. April 2012, 16:24 Uhr
„Kernelmodule“ wurde von SiD 15:26, 13. Apr. 2012 (CEST) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere SiD 15:26, 13. Apr. 2012 (CEST) bitte, bevor du den Artikel bearbeitest.
- Damit ein Kernel Modul als solches vorhanden ist, muss es als Modul kompiliert werden. Die entsprechende Zeile in der Kernel Konfiguration 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 Modul Optionen 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.
Informationen über Module anzeigen
- Anzeigen welche Kernel Module geladen sind
$ lsmod
- Informationen über ein bestimmtes Modul anzeigen
$ modinfo modul_name
- Abhängigkeiten eines Moduls (oder Aliases) anzeigen
$ modprobe --show-deps 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 Bash Script 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 direct auf das Verzeichnis zu um eine Beschreibung der Modulen 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
Um Module, die nicht automatisch von Udev geladen werden beim Booten zu laden, müssen sie in der rc.conf eingetragen werden.
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 Kernel Modul 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 automatisceh 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 Kernel Modulen bezeichnet Blacklisting den Mechanisumus 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 initrmfs neu generiert und der Rechner neu gestartet werden.
per Konkigurationsdateien
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, das 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 ...