Kernelmodule: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(23 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
Grundsätzlich besitzt der Linux-Kernel einen monolithischen Aufbau; allerdings bietet er auch die Möglichkeit, Module  
+
== Kernelmodule ==
−
zur Laufzeit zu laden und entladen. Unter einem Kernelmodul versteht man im Allgemeinen einen Teil bzw. eine Erweiterung  
+
Der Linux-Kernel besitzt grundsätzlich einen monolithischen Aufbau, bietet jedoch auch die Möglichkeit, Module zur Laufzeit zu laden und zu entladen. Ein Kernelmodul ist im Allgemeinen ein Teil oder eine Erweiterung des Kernels. Beispielsweise sind alle Hardwaretreiber (wie WLAN-Karte, Soundkarte usw.) als Modul angelegt. Die meisten Linux-Distributionen, einschließlich Ubuntu, machen starken Gebrauch von Kernelmodulen, um die bestmögliche Hardwarekompatibilität mit nur einem "allgemeinen" Kernel zu erreichen. In der Regel werden alle notwendigen Module beim Systemstart und falls nötig zur Laufzeit geladen, sodass der Nutzer sich nicht weiter darum kümmern muss.
−
des Kernels. So sind z.B. alle Hardwaretreiber (z.B. WLAN-Karte, Soundkarte...) als Modul angelegt.
 
  
−
Die meisten Linux-Distributionen inklusive Ubuntu machen starken Gebrauch von Kernelmodulen, da so die bestmögliche
+
== Modulverwaltung ==
−
Hardwarekompatibilität mit nur einem "allgemeinen" Kernel erreicht werden kann.
+
*Module können geladen und entladen werden mit:
  
−
In der Regel werden alle notwendigen Module beim Systemstart und falls nötig zur Laufzeit geladen, so dass der Nutzer sich
+
    modprobe [Optionen] Modulname
−
nicht weiter darum kümmern muss (bzw. es oft noch nicht einmal mitbekommt).
+
 
 +
;Optionen sind unter anderem:
 +
 
 +
* '''-v''': Ausführliche Ausgabe
 +
* '''-n''': Simuliert das Laden des Moduls, lädt es aber nicht
 +
* '''-a''': Lädt alle in der Kommandozeile angegebenen Module
 +
* '''-r''': Entlädt Module
  
  
 
== Installation ==
 
== Installation ==
−
Die Programme zum Umgang mit den Modulen sollten in der Standardinstallation enthalten sein, können aber ansonsten über  
+
Die Programme zum Umgang mit den Modulen sollten in der Standardinstallation enthalten sein, können aber ansonsten über das Paket module-init-tools installiert werden.
−
das Paket  
 
−
* module-init-tools
 
−
installiert werden.
 
−
==Tools==
 
  
−
{| border=1 cellpadding=2
+
== Tools ==
−
!Kommando
+
Verschiedene Kommandos bieten unterschiedliche Funktionalitäten:
−
!Bedeutung
+
* '''lsmod''': Zeigt geladene Module an
−
|-
+
* '''modprobe''': Universelles und mächtiges Werkzeug zum Entladen und Laden von Modulen
−
|lsmod
+
* '''rmmod''': Einfaches Tool zum Entfernen von Modulen
−
|Zeigt geladene Module an
+
* '''insmod''': Einfaches Tool zum Installieren von Modulen
−
|-
+
* '''depmod''': Erstellt Dateien zur Auflösung von Modulabhängigkeiten
−
|modprobe
+
* '''modinfo''': Informationen über Module
−
|universales und mächtiges Werkzeug zum Entladen und Laden von Modulen
+
 
−
|-
+
== Ort, wo die Module des laufenden Kernels liegen ==
−
|rmmmod
+
;Die Module des aktuellen Kernels befinden sich im Verzeichnis /lib/modules/$(uname -r).
−
|Einfaches Tool zum entfernen von Module
+
*find /lib/modules/$(uname -r) -name "*.ko"
−
|-
 
−
|insmod
 
−
|Einfaches Tool zum installieren von Module
 
−
|-
 
−
|depmod
 
−
|Erstellt Dateien zur Auflösung von Modulabhängigkeit
 
−
|-
 
−
|modinfo
 
−
|Informationen über Modules
 
−
|}
 
  
 
== Geladene Module anzeigen ==
 
== Geladene Module anzeigen ==
−
root@zero:~# lsmod
+
;Mit dem Befehl '''lsmod''' kann man die aktuell geladenen Module anzeigen lassen.
−
Module                 Size  Used by
+
*lsmod
−
binfmt_misc            16776  1
 
−
bridge                56340  0
 
−
stp                    10500  1 bridge
 
−
bnep                  20224  2
 
−
nfs                  266344  1
 
−
lockd                  74156  1 nfs
 
−
nfs_acl                11136  1 nfs
 
−
input_polldev          11912  0
 
−
video                  25360  0
 
−
output                11008  1 video
 
−
sunrpc                195424  10 nfs,lockd,nfs_acl
 
−
lp                    17156  0
 
−
psmouse                61972  0
 
−
ppdev                  15620  0
 
−
intel_agp              34108  1
 
−
pcspkr                10496  0
 
−
i2c_piix4              18448  0
 
−
serio_raw              13316  0
 
−
parport_pc            40100  1
 
−
agpgart                42696  1 intel_agp
 
−
parport                42220  3 lp,ppdev,parport_pc
 
−
shpchp                40212  0
 
−
pcnet32                41092  0
 
−
mii                    13312  1 pcnet32
 
−
mptspi                25864  2
 
−
mptscsih              43520  1 mptspi
 
−
mptbase                88420  2 mptspi,mptscsih
 
−
scsi_transport_spi    30080  1 mptspi
 
−
floppy                64324  0
 
−
fbcon                  46112  0
 
−
tileblit              10752  1 fbcon
 
−
font                  16384  1 fbcon
 
−
bitblit                13824  1 fbcon
 
−
softcursor              9984  1 bitblit
 
  
 
== Information anzeigen ==
 
== Information anzeigen ==
−
root@zero:~# modinfo nfs
+
;Mit dem Befehl '''modinfo''' kann man Informationen zu einem bestimmten Modul anzeigen lassen.
−
filename:      /lib/modules/2.6.28-13-generic/kernel/fs/nfs/nfs.ko
+
*modinfo usb_common
−
license:        GPL
 
−
author:        Olaf Kirch <okir@monad.swb.de>
 
−
srcversion:    CB761B4E8A05FF8B3FD74F8
 
−
depends:        sunrpc,lockd,nfs_acl
 
−
vermagic:      2.6.28-13-generic SMP mod_unload modversions 586
 
−
parm:          enable_ino64:bool
 
−
 
 
−
oder
 
−
 
 
−
root@zero:~# modinfo -F filename nfs
 
−
/lib/modules/2.6.28-13-generic/kernel/fs/nfs/nfs.ko
 
−
 
 
−
um Werte aus einzelnen Kategorien anzuzeigen.
 
  
 +
== Module laden/entladen ==
 +
;Mit dem Befehl '''modprobe''' können Module zur Laufzeit geladen oder entladen werden. Modprobe löst dabei automatisch Abhängigkeiten auf.
 +
*modprobe -v usb_common
  
−
==Übersicht über alle Module==
+
== Abhängigkeiten von Modulen ==
−
root@zero:~# modprobe -l | more
+
;Manche Module können erst genutzt bzw. geladen werden, wenn andere Module geladen sind, da sie von diesen abhängen.
 +
*Diese Abhängigkeiten sind in der Datei /lib/module/<Kernelversion>/modules.dep hinterlegt.
 +
*depmod -a
  
−
==Module laden/entladen==
+
==Automatisches Laden von Modulen==
−
===modprobe===
+
*cat /etc/modules
−
Mit modprobe können Module zur Laufzeit des Systems ge- und entladen werden. modprobe löst dabei automatisch Abhängigkeiten
+
<pre>
−
auf, d.h. wenn das zu ladende Modul andere Module voraussetzt, werden diese automatisch in der richtigen Reihenfolge
+
# /etc/modules: kernel modules to load at boot time.
−
mitgeladen bzw. werden Module automatisch mit entfernt, welche nur aus Abhänigkeitsgründen geladen wurden.
+
#
 +
# This file contains the names of kernel modules that should be loaded
 +
# at boot time, one per line. Lines beginning with "#" are ignored.
  
−
modprobe [Optionen] Modulname(n)
+
lp
−
 
+
wlan
−
===Optionen===
+
</pre>
−
* -v : ausführliche Ausgabe
 
−
root@zero:~# modprobe -v lp
 
−
insmod /lib/modules/2.6.28-13-generic/kernel/drivers/parport/parport.ko
 
−
insmod /lib/modules/2.6.28-13-generic/kernel/drivers/char/lp.ko
 
−
 
 
−
* -n : simuliert das Laden des Moduls, lädt es aber nicht
 
−
root@zero:~# modprobe -v -n wlan
 
−
insmod /lib/modules/2.6.28-13-generic/volatile/wlan.ko
 
−
 
 
−
* -a : Es werden alle in der Kommandozeile angegebenen Module geladen. Diese Option muss immer dann verwendet werden,
 
−
wenn mehrere Module auf einmal geladen werden sollen.
 
−
* --show-depends : zeigt Abhängigkeiten an
 
−
root@zero:~# modprobe --show-depends lp
 
−
insmod /lib/modules/2.6.28-13-generic/kernel/drivers/parport/parport.ko
 
−
insmod /lib/modules/2.6.28-13-generic/kernel/drivers/char/lp.ko
 
−
 
 
−
* -r : entlädt Module
 
−
root@zero:~# modprobe -r lp
 
−
 
 
−
 
 
−
===Dateien===
 
−
modprobe durchsucht '''/lib/modules/$(uname -r)''' nach den Modulen. uname -r gibt die Versionsnummer des installierten Kernel
 
−
aus.
 
−
 
 
−
root@zero:~# modprobe -v btusb
 
−
insmod /lib/modules/2.6.28-13-generic/kernel/drivers/bluetooth/btusb.ko
 
−
 
 
−
==Abhängigkeiten von Modulen==
 
−
Manche Module können erst genutzt bzw. geladen werden, wenn andere Module geladen sind, da sie von diesen abhängen. Diese
 
−
Abhängigkeiten sind in der Datei '''/lib/module/<Kernelversion>/modules.dep''' hinterlegt. Diese Datei mit korrekt angelegten
 
−
Abhängigkeiten wird bei der Installation von Ubuntu hinterlegt, so dass keine Änderungen vorgenommen werden müssen.
 
−
Installiert man zusätzliche eigene Module, so sollte die Datei modules.dep neu erstellt werden. Dies geschieht über den
 
−
Befehl depmod.
 
−
 
 
−
depmod [Optionen]
 
−
 
 
−
===Optionen===
 
−
* -A : Es wird zuerst geprüft, ob neue Module hinzugekommen sind. Wenn nicht wird keine neue modules.dep erstellt.
 
−
* -n : Das Erstellen der neuen modules.dep wird simuliert, ohne die Aktionen wirklich durchzuführen.
 
−
 
 
−
==Module automatisch laden==
 
−
Möchte man ein Modul, welches der Kernel nicht automatisch mit lädt, beim Systemstart automatisch laden, so trägt man
 
−
den Modulnamen einfach in die Datei /etc/modules ein. Ab dem nächsten Systemstart werden alle Module (zusätzlich)
 
−
geladen, die dort eingetragen sind.
 
−
 
 
−
root@zero:~# cat /etc/modules
 
−
# /etc/modules: kernel modules to load at boot time.
 
−
#
 
−
# This file contains the names of kernel modules that should be loaded
 
−
# at boot time, one per line. Lines beginning with "#" are ignored.
 
−
 
−
lp
 
−
wlan
 
  
 
==Automatisches Laden verhindern - Blacklisting==
 
==Automatisches Laden verhindern - Blacklisting==
−
Unter bestimmten Umständen kann es sinnvoll sein, das Laden von bestimmten Modulen explizit zu verbieten. Dies geschieht  
+
*Unter bestimmten Umständen kann es sinnvoll sein, das Laden von bestimmten Modulen explizit zu verbieten.  
−
durch den Eintrag des entsprechenden Moduls in eine so genannte Blacklist-Datei. Diese Dateien befinden sich im Verzeichnis  
+
*Dies geschieht durch den Eintrag des entsprechenden Moduls in eine so genannte Blacklist-Datei.  
−
/etc/modprobe.d. In der Regel sind hier schon einige Einträge zu finden. Die Datei legt man mit einem Editor mit Root-Rechten  
+
*Diese Dateien befinden sich im Verzeichnis '''/etc/modprobe.d'''.  
−
an bzw. öffnet eine vorhandene Datei) und fügt einen Dateieintrag nach folgendem Schema hinzu, je ein Eintrag pro Zeile:
+
*In der Regel sind hier schon einige Einträge zu finden.  
−
 
+
*Die Datei legt man mit einem Editor mit Root-Rechten an bzw. öffnet eine vorhandene Datei) und fügt einen Dateieintrag nach folgendem Schema hinzu, je ein Eintrag pro Zeile:
−
root@zero:/etc/modprobe.d# cat blacklist.conf  
+
==Blacklist Datei==
 +
*cat /etc/modprobe.d/blacklist.conf
 +
<pre>
 
  # This file lists those modules which we don't want to be loaded by
 
  # This file lists those modules which we don't want to be loaded by
−
# alias expansion, usually so some other driver will be loaded for the
+
# alias expansion, usually so some other driver will be loaded for the
−
# device instead.
+
# device instead.
−
 
−
# evbug is a debug tool that should be loaded explicitly
 
−
blacklist evbug
 
−
 
−
# these drivers are very simple, the HID drivers are usually preferred
 
−
blacklist usbmouse
 
−
blacklist usbkbd
 
−
...
 
−
 
 
−
Man kann auch neue Dateien anlegen. Diese müssen lediglich mit '''blacklist-''' beginnen.
 
−
root@zero:/etc/modprobe.d# cat > '''blacklist-'''wlan.conf
 
−
blacklist wlan
 
−
(Strg+C)
 
  
−
==Aliases==
+
# evbug is a debug tool that should be loaded explicitly
−
Mit der Direktive alias kann man Module einem Gerät zuordnen
+
blacklist evbug
−
root@zero:~$ cat /etc/modprobe.d/aliases
 
−
...
 
−
# character devices ##########################################################
 
−
alias char-major-9-* st
 
−
alias char-major-10-1 psmouse
 
−
....
 
−
# block devices ##############################################################
 
−
alias block-major-3-*  ide_generic
 
−
alias block-major-8-*  sd_mod
 
−
....
 
  
−
=Option=
+
# these drivers are very simple, the HID drivers are usually preferred
−
Mit der Direktive options kann man Module mit gewissen Optionen laden
+
blacklist usbmouse
−
root@zero:~$ cat  /etc/modprobe.d/options
+
blacklist usbkbd
−
# Enable double-buffering so gstreamer et. al. work
+
...
−
options quickcam compatible=2
+
</pre>
 +
=Man kann auch neue Dateien anlegen. Diese müssen lediglich mit '''blacklist-''' beginnen=
  
−
# Default hostap to managed mode
+
<pre>
−
options hostap_pci iw_mode=2
+
root@zero:/etc/modprobe.d# cat > blacklist-wlan.conf
−
options hostap_cs iw_mode=2
+
blacklist wlan
−
...
+
(Strg+C)
−
=Skripte=
+
</pre>
−
Des weiteren ist es möglich Skripte vor oder nach dem Laden bzw entladen auszuführen
 
−
 
−
*post-install modul befehl
 
−
*pre-install modul befehl
 
−
*post-remove modul befehl
 
−
*pre-remove modul befehl
 

Aktuelle Version vom 26. Juni 2023, 09:10 Uhr

Kernelmodule

Der Linux-Kernel besitzt grundsätzlich einen monolithischen Aufbau, bietet jedoch auch die Möglichkeit, Module zur Laufzeit zu laden und zu entladen. Ein Kernelmodul ist im Allgemeinen ein Teil oder eine Erweiterung des Kernels. Beispielsweise sind alle Hardwaretreiber (wie WLAN-Karte, Soundkarte usw.) als Modul angelegt. Die meisten Linux-Distributionen, einschließlich Ubuntu, machen starken Gebrauch von Kernelmodulen, um die bestmögliche Hardwarekompatibilität mit nur einem "allgemeinen" Kernel zu erreichen. In der Regel werden alle notwendigen Module beim Systemstart und falls nötig zur Laufzeit geladen, sodass der Nutzer sich nicht weiter darum kümmern muss.

Modulverwaltung

  • Module können geladen und entladen werden mit:
   modprobe [Optionen] Modulname
Optionen sind unter anderem
  • -v: Ausführliche Ausgabe
  • -n: Simuliert das Laden des Moduls, lädt es aber nicht
  • -a: Lädt alle in der Kommandozeile angegebenen Module
  • -r: Entlädt Module


Installation

Die Programme zum Umgang mit den Modulen sollten in der Standardinstallation enthalten sein, können aber ansonsten über das Paket module-init-tools installiert werden.

Tools

Verschiedene Kommandos bieten unterschiedliche Funktionalitäten:

  • lsmod: Zeigt geladene Module an
  • modprobe: Universelles und mächtiges Werkzeug zum Entladen und Laden von Modulen
  • rmmod: Einfaches Tool zum Entfernen von Modulen
  • insmod: Einfaches Tool zum Installieren von Modulen
  • depmod: Erstellt Dateien zur Auflösung von Modulabhängigkeiten
  • modinfo: Informationen über Module

Ort, wo die Module des laufenden Kernels liegen

Die Module des aktuellen Kernels befinden sich im Verzeichnis /lib/modules/$(uname -r).
  • find /lib/modules/$(uname -r) -name "*.ko"

Geladene Module anzeigen

Mit dem Befehl lsmod kann man die aktuell geladenen Module anzeigen lassen.
  • lsmod

Information anzeigen

Mit dem Befehl modinfo kann man Informationen zu einem bestimmten Modul anzeigen lassen.
  • modinfo usb_common

Module laden/entladen

Mit dem Befehl modprobe können Module zur Laufzeit geladen oder entladen werden. Modprobe löst dabei automatisch Abhängigkeiten auf.
  • modprobe -v usb_common

Abhängigkeiten von Modulen

Manche Module können erst genutzt bzw. geladen werden, wenn andere Module geladen sind, da sie von diesen abhängen.
  • Diese Abhängigkeiten sind in der Datei /lib/module/<Kernelversion>/modules.dep hinterlegt.
  • depmod -a

Automatisches Laden von Modulen

  • cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
wlan

Automatisches Laden verhindern - Blacklisting

  • Unter bestimmten Umständen kann es sinnvoll sein, das Laden von bestimmten Modulen explizit zu verbieten.
  • Dies geschieht durch den Eintrag des entsprechenden Moduls in eine so genannte Blacklist-Datei.
  • Diese Dateien befinden sich im Verzeichnis /etc/modprobe.d.
  • In der Regel sind hier schon einige Einträge zu finden.
  • Die Datei legt man mit einem Editor mit Root-Rechten an bzw. öffnet eine vorhandene Datei) und fügt einen Dateieintrag nach folgendem Schema hinzu, je ein Eintrag pro Zeile:

Blacklist Datei

  • cat /etc/modprobe.d/blacklist.conf
 # This file lists those modules which we don't want to be loaded by
# alias expansion, usually so some other driver will be loaded for the
# device instead.

# evbug is a debug tool that should be loaded explicitly
blacklist evbug

# these drivers are very simple, the HID drivers are usually preferred
blacklist usbmouse
blacklist usbkbd
...

Man kann auch neue Dateien anlegen. Diese müssen lediglich mit blacklist- beginnen

root@zero:/etc/modprobe.d# cat > blacklist-wlan.conf
blacklist wlan
(Strg+C)