Kernelmodule

Aus xinux.net
Zur Navigation springen Zur Suche springen

Grundsätzlich besitzt der Linux-Kernel einen monolithischen Aufbau; allerdings bietet er auch die Möglichkeit, Module zur Laufzeit zu laden und entladen. Unter einem Kernelmodul versteht man im Allgemeinen einen Teil bzw. eine Erweiterung 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 Hardwarekompatibilität mit nur einem "allgemeinen" Kernel erreicht werden kann.

In der Regel werden alle notwendigen Module beim Systemstart und falls nötig zur Laufzeit geladen, so dass der Nutzer sich nicht weiter darum kümmern muss (bzw. es oft noch nicht einmal mitbekommt).


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

Kommando Bedeutung
lsmod Zeigt geladene Module an
modprobe 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

root@zero:~# cd /lib/modules/$(uname -r)

Geladene Module anzeigen

root@zero:~# lsmod
Module                  Size  Used by
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

root@zero:~# modinfo nfs
filename:       /lib/modules/2.6.28-13-generic/kernel/fs/nfs/nfs.ko
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.


Übersicht über alle Module

root@zero:~# modprobe -l | more

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 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

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:

root@zero:/etc/modprobe.d# cat 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)

Aliases

Mit der Direktive alias kann man Module einem Gerät zuordnen

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

Mit der Direktive options kann man Module mit gewissen Optionen laden

root@zero:~$ cat  /etc/modprobe.d/options 
# Enable double-buffering so gstreamer et. al. work
options quickcam compatible=2
# Default hostap to managed mode
options hostap_pci iw_mode=2
options hostap_cs iw_mode=2
...

Skripte

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