Kernelmodule: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(20 dazwischenliegende Versionen von 2 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
 
|-
 
|rmmod
 
|Einfaches Tool zum entfernen von Module
 
|-
 
|insmod
 
|Einfaches Tool zum installieren von Module
 
|-
 
|depmod
 
|Erstellt Dateien zur Auflösung von Modulabhängigkeit
 
|-
 
|modinfo
 
|Informationen über Modules
 
|}
 
  
== Ort wo die Module des laufenden Kernels liegen ==
+
== Ort, wo die Module des laufenden Kernels liegen ==
root@zero:~# cd /lib/modules/$(uname -r)
+
;Die Module des aktuellen Kernels befinden sich im Verzeichnis /lib/modules/$(uname -r).
 +
*find /lib/modules/$(uname -r) -name "*.ko"
  
 
== 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
+
== 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
  
root@zero:~# modinfo -F filename nfs
+
== Abhängigkeiten von Modulen ==
/lib/modules/2.6.28-13-generic/kernel/fs/nfs/nfs.ko
+
;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
  
um Werte aus einzelnen Kategorien anzuzeigen.
+
==Automatisches Laden von Modulen==
 +
*cat /etc/modules
 +
<pre>
 +
# /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
==Übersicht über alle Module==
+
wlan
root@zero:~# modprobe -l | more
+
</pre>
 
 
==Module laden/entladen==
 
===modprobe===
 
Mit modprobe können Module zur Laufzeit des Systems ge- und entladen werden. modprobe löst dabei automatisch Abhängigkeiten
 
auf, d.h. wenn das zu ladende Modul andere Module voraussetzt, werden diese automatisch in der richtigen Reihenfolge
 
mitgeladen bzw. werden Module automatisch mit entfernt, welche nur aus Abhänigkeitsgründen geladen wurden.
 
 
 
modprobe [Optionen] Modulname(n)
 
 
 
===Optionen===
 
* -v : ausführliche Ausgabe
 
root@zero:~# modprobe -v vfat
 
insmod /lib/modules/2.6.27-7-generic/kernel/fs/fat/fat.ko
 
insmod /lib/modules/2.6.27-7-generic/kernel/fs/vfat/vfat.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)