Kernelmodule: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
K (inuse entfernt)
K (correct link)
(12 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
*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.
*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 Modul Optionen gehandhabt werden. Auch [[Udev]] lädt die Module mit Hilfe von ''modprobe''.
*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.}}
{{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 <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
modulname1
modulname2
modulname3
usw.


== Informationen über Module anzeigen ==
== Informationen über Module anzeigen ==
*Anzeigen welche Kernel Module geladen sind  
*Anzeigen welche Kernelmodule geladen sind  
  $ lsmod
  $ lsmod
*Informationen über ein bestimmtes Modul anzeigen
*Informationen über ein bestimmtes Modul anzeigen
Zeile 25: Zeile 34:


== Parameter ==
== 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.
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 33: Zeile 42:
     do
     do
         md=/sys/module/$mod/parameters;
         md=/sys/module/$mod/parameters;
         [[ ! -d $md ]] && continue;
         <nowiki>[[ ! -d $md ]]</nowiki> && continue;
         m=$mod;
         m=$mod;
         d=`modinfo -d $m 2>$N | tr "\n" "\t"`;
         d=`modinfo -d $m 2>$N | tr "\n" "\t"`;
Zeile 79: Zeile 88:
Nur das angegebene Modul, ohne Abhängigkeiten (nicht zu empfehlen) laden.
Nur das angegebene Modul, ohne Abhängigkeiten (nicht zu empfehlen) laden.
  # insmod ''modul_name''
  # 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 ==
== Entfernen ==
Zeile 88: Zeile 96:


== Optionen ==
== Optionen ==
Um ein Kernel Modul mit bestimmten Parametern zu laden, können Konfigurationsdateien in ''/etc/modprobe.conf/'' oder die Kernel Kommandozeile verwendet werden.
Um ein Kernelmodul mit bestimmten Parametern zu laden, können Konfigurationsdateien in ''/etc/modprobe.conf/'' oder die Kernel Kommandozeile verwendet werden.


=== Konfigurationsdateien ===
=== Konfigurationsdateien ===
Zeile 100: 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 111: 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 automatisceh laden unterbinden, die Module können aber immer noch manuell geladen werden.
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 121: Zeile 129:


== Blacklisting ==
== 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.
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 initrmfs neu generiert und der Rechner neu gestartet werden.
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 Konkigurationsdateien ===
=== 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 131: Zeile 139:
  blacklist pcspkr
  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.
{{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:
Um das Laden eines Moduls komplett zu unterbinden gibt es einen Workaround:
  /etc/modprobe.d/blacklist.conf
  /etc/modprobe.d/blacklist.conf
   
   
Zeile 139: Zeile 147:
  install ''modul_name'' /bin/false
  install ''modul_name'' /bin/false
  ...
  ...
Das verhindert effektiv, das das Modul und alle anderen die von ihm Abhängen geladen werden.
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 161: Zeile 169:


== Weblinks ==
== Weblinks ==
* [http://de.wikipedia.org/wiki/Kernel-Modul Kernel-Modul – Wikipedia] {{sprache|de}}
* [http://linuxmanpages.com/man8/modprobe.8.php modprobe Man-Page] {{sprache|en}}
* [http://linuxmanpages.com/man5/modprobe.conf.5.php modprobe.conf Man-Page] {{sprache|en}}
* [http://linuxmanpages.com/man5/modprobe.conf.5.php modprobe.conf Man-Page] {{sprache|en}}
* [[IPv6 - Modul deaktivieren]] {{sprache|de}}


[[Kategorie:Konfiguration]]
[[Kategorie:Konfiguration]]
[[Kategorie:Hardware]]
[[Kategorie:Hardware]]
[[en:Kernel module]]

Version vom 14. Oktober 2020, 01:12 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-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 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
...

Weblinks