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