14.7 Kernelmodule verwalten
Wir wollen uns nun der Frage widmen, wie man unter Linux Kernel-Module und damit Treiber für bestimmte Hardware laden und wieder loswerden kann. Notwendig dafür ist der entsprechende Support im Kernel. Ist dieser vorhanden, so sind die jeweils verfügbaren Module im Verzeichnis /lib/modules/<Kernel-Version> zu finden. Welchen Kernel man gerade gebootet hat, kann man mit dem uname-Tool erfahren:
Listing 14.101 Kernel-Version mit uname ermitteln
# uname -a
Linux steffenmobile 2.6.31-20-generic #58-Ubuntu SMP Fri Mar
12 05:23:09 UTC 2010 i686 GNU/Linux
Das Verzeichnis /lib/modules/2.6.31-20-generic enthält also die zum verwendeten Kernel gehörigen Kernelmodule.
14.7.1 modprobe
Möchte man ein Modul zur Laufzeit in den Kernel laden, so ist in der Regel modprobe das Tool der Wahl. Man übergibt ihm nur den Namen des Moduls, und es lädt die entsprechende Moduldatei samt eventuell vorhandener Abhängigkeiten.
Automatische Abhängigkeiten
Um diese Abhängigkeiten auflösen zu können, greift modprobe auf die modules.dep-Datei im entsprechenden Verzeichnis unter /lib/modules/<Kernel-Version> zu. Diese wird in der Regel während des Bootens von depmod erstellt. Dazu durchsucht depmod das gesamte Verzeichnis und löst alle Referenzen und damit alle Abhängigkeiten der Module untereinander auf.
Sehen Sie sich die entsprechende modules.dep-Datei auf Ihrem Rechner ruhig einmal an. Das folgende Listing enthält einen Auszug aus der entsprechenden Datei eines unserer Notebooks. Sie sehen in jeder Zeile den Dateinamen eines Moduls und hinter dem Doppelpunkt eine Liste anderer Module, von denen es abhängt. Die Liste kann auch leer sein, wenn keine Abhängigkeiten bestehen (in diesem Fall endet die Zeile nach dem Doppelpunkt).
Listing 14.102 Auszug einer modules.dep-Datei
kernel/drivers/staging/cpc-usb/cpc-usb.ko:
kernel/drivers/staging/pata_rdc/pata_rdc.ko:
kernel/drivers/staging/udlfb/udlfb.ko:
kernel/drivers/platform/x86/asus-laptop.ko: kernel/drivers/
leds/led-class.ko
kernel/drivers/platform/x86/eeepc-laptop.ko:
kernel/drivers/platform/x86/msi-laptop.ko:
kernel/drivers/platform/x86/compal-laptop.ko:
kernel/drivers/platform/x86/dell-laptop.ko: kernel/drivers/
firmware/dcdbas.ko
kernel/drivers/platform/x86/dell-wmi.ko:
kernel/drivers/platform/x86/acer-wmi.ko: kernel/drivers/
leds/led-class.ko
kernel/drivers/platform/x86/acerhdf.ko:
kernel/drivers/platform/x86/hp-wmi.ko:
kernel/drivers/platform/x86/tc1100-wmi.ko:
Mit dem Parameter -r kann man Module auch wieder aus dem Kernel entfernen. Dabei versucht modprobe, rekursiv ebenfalls alle nicht weiter benötigten Module zu entladen, von denen das auf der Kommandozeile angegebene Modul abhängt.
14.7.2 lsmod
Geladene Module anzeigen
Möchten Sie sich alle geladenen Module anzeigen lassen, so hilft Ihnen das Tool lsmod weiter. Seine Ausgabe nennt alle geladenen Module, ihre Größe sowie die von ihnen jeweils abhängigen anderen Module.
Listing 14.103 lsmod
# lsmod
Module Size Used by
...
dell_laptop 8128 0
dcdbas 7292 1 dell_laptop
In diesem Beispiel sehen Sie, dass der Treiber für Dell-Laptops dell_laptop das Kernelmodul dcdbas benötigt (vergleichen Sie dazu den obigen Auszug aus der Datei modules.dep in Listing modules.depAuszug, die genau diese Abhängigkeit enthält). Möchte man mehr Informationen über ein bestimmtes Modul, kann man auf das Tool modinfo zurückgreifen:
Listing 14.104 modinfo
$ modinfo dcdbas
filename: /lib/modules/2.6.31-20-generic/kernel/drivers/
firmware/dcdbas.ko
alias: dmi:*:[bs]vnD[Ee][Ll][Ll]*:*
license: GPL
author: Dell Inc.
version: 5.6.0-3.2
description: Dell Systems Management Base Driver (version
5.6.0-3.2)
srcversion: 69CF3C336BF107F5812D0B9
depends:
vermagic: 2.6.31-20-generic SMP mod_unload modversions
586
$ modinfo dell_laptop
filename: /lib/modules/2.6.31-20-generic/kernel/drivers/
platform/x86/dell-laptop.ko
alias: dmi:*svnDellInc.:*:ct8:*
license: GPL
description: Dell laptop driver
author: Matthew Garrett <mjg@redhat.com>
srcversion: 9739006FA71D2495175583A
depends: dcdbas
14.7.3 insmod und rmmod
Weniger clever [Fn. Das sagt sogar die Manpage: »Most users will want to use modprobe(8) instead, which is cleverer.«] als modprobe sind die Tools insmod und rmmod. Beiden ist gemeinsam, dass sie keine Abhängigkeiten zwischen unterschiedlichen Modulen berücksichtigen können. Bei insmod ist es sogar notwendig, den genauen Dateinamen statt des kürzeren Modulnamens anzugeben.
Wir wollten diese beiden Tools nur einmal erwähnt haben; näher ausführen werden wir ihre Benutzung nicht. Nutzen Sie lieber modprobe, das die Aufrufe von insmod beziehungsweise rmmod vor Ihnen als Benutzer versteckt.
14.7.4 /etc/modules und Co.
Nun bleiben natürlich noch ein paar Fragen offen, beispielsweise wann und wie man Module schon zur Bootzeit laden kann. Dies wird auf den verschiedenen Distributionen leider recht unterschiedlich gelöst, nutzen Sie daher im Zweifelsfall lieber die distributionseigenen Tools.
Wenn Sie jedoch per Hand etwas editieren möchten oder müssen, schauen Sie im Verzeichnis /etc nach Dateien, deren Name den String mod enthält:
Listing 14.105 Durchforsten des /etc-Verzeichnisses
$ ls -l /etc | grep mod
drwxr-xr-x 2 root root 4096 2010-02-03 12:54 modprobe.d
-rw-r--r-- 1 root root 202 2010-01-29 21:30 modules
modules, modprobe.conf und modprobe.d
Auf diesem System gibt es also die Datei modules und das Verzeichnis modprobe.d (manchmal wird statt diesem auch eine Datei namens modprobe.conf verwendet). Bei näherem Betrachten der Kommentare am Anfang der Dateien erschließt sich auch gleich ihr Zweck:
Listing 14.106 Die /etc/modules
$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel
# modules that are to be loaded at boot time, one
# per line. Comments begin with a "#", and
# everything on the line after them are ignored.
lp
rtc
Hier kann man leicht sehen, dass einfach nur die beim Booten zu ladenden Modulnamen angegeben werden müssen.
Natürlich haben Module auch untereinander Abhängigkeiten, die manchmal aufgrund von Namenskonflikten nicht aufgelöst werden können, oder Sie möchten nach bzw. vor dem Laden bestimmter Module Skripte oder andere Aktionen ausführen. In diesem Fall helfen modprobe.conf bzw. modprobe.d weiter:
Listing 14.107 Das Verzeichnis /etc/modprobe.d
$ ls /etc/modprobe.d
alsa-base.conf
blacklist-ath_pci.conf
blacklist.conf
blacklist-firewire.conf
blacklist-framebuffer.conf
blacklist-modem.conf
blacklist-oss.conf
blacklist-watchdog.conf
dkms.conf
libpisock9.conf
nvidia-kernel-nkc.conf
Es handelt sich bei all diesen Dateien um typische Textdateien. Im Folgenden sind die darin möglichen Befehle beschrieben:
- alias Name1 Name2
Der Befehl alias definiert einen Ersatznamen Name1 für das Modul, das über Name2 angegeben wurde. Mit alias lassen sich etwa Kurznamen für sehr lange Modulnamen definieren: alias Kurz LaaaaaangerNaaaaame. - options Modul Optionen
Beim Laden eines Moduls (etwa via modprobe) können Parameter übergeben werden, die Sie über den options-Befehl festlegen. - install Ladebefehl
Dieser Befehl ermöglicht es Ihnen, einen bestimmten Shellbefehl beim Laden des Kernelmoduls über modprobe ausführen zu lassen, anstatt das Modul auf dem Standardweg automatisch zu laden. - remove Befehl
Wenn Sie mit modprobe -r ein Modul aus dem Kernel entfernen und Sie für dieses Modul eine remove-Direktive angelegt haben, wird der dort angegebene Befehl ausgeführt. - include Datei
Ähnlich wie in diversen Programmiersprachen können Sie über den include-Befehl Datei-Inhalte und sogar ganze Verzeichnisinhalte in Ihre Konfigurationsdatei einbinden. - blacklist Modul
Um zu verhindern, dass ein Modul automatisch geladen wird, können Sie den Befehl blacklist verwenden.
14.7.5 modconf
Der Weg, den Debian sowie seine Ableger Ubuntu und Co. bei der Konfiguration von Modulen gehen, ist etwas anders. Dort müssen Sie die Dateien wie /etc/modules nicht unbedingt direkt editieren, sondern können stattdessen das Tool modconf benutzen. Sie wählen darin die Module aus den entsprechenden Kategorien aus und erkennen dort auch deren Status. Die Bedienung selbst ist intuitiv: Sie erfolgt durch die Cursortasten sowie Enter.
Abbildung 14.6 modconf
Das Tool macht letztendlich natürlich auch nichts anderes, als die eben genannten Dateien zu editieren. Aber durch die Oberfläche finden Sie passende Module schneller, und zudem werden Tippfehler vermieden.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.