Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Dieser Artikel beschreibt den Umgang mit Kernelmodulen und den Hilfsmitteln, die das System bietet, um Module zu verwalten.
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).
Die Programme zum Umgang mit den Modulen sollten in der Standardinstallation enthalten sein, können aber ansonsten über das Paket
module-init-tools
mit apturl
Paketliste zum Kopieren:
sudo apt-get install module-init-tools
sudo aptitude install module-init-tools
installiert werden [1].
Im Folgenden werden einige wichtige Befehle für den Umgang mit Modulen kurz vorgestellt. Alle Befehle werden im Terminal [2] aufgerufen.
Das Laden, Entladen sowie Erstellen von Abhängigkeiten erfordert Root-Rechte!
Mit dem Befehl
lsmod
können alle aktuell geladenen Module angezeigt werden.
Beispiel:
$ lsmod
Ausgabe
Module Size Used by p4_clockmod 6692 0 ipv6 268704 8 binfmt_misc 12680 1 rfcomm 40856 0 l2cap 25728 5 rfcomm bluetooth 55908 4 rfcomm,l2cap ppdev 10116 0 radeon 124576 2 drm 81044 3 radeon cpufreq_stats 7360 0 (...)
Wie man sieht, wird in der 1. Spalte der Modulname angezeigt, in der 2. Spalte der belegte Speicher in Bytes und in der 3. Spalte die Anzahl der Prozesse und Module die dieses Modul benutzen gefolgt von einer Liste der Modulnamen die dieses Modul benutzen.
lsmod kennt keine weiteren Optionen.
Mit Hilfe des Befehls modinfo werden Informationen zu einem bestimmten Modul angezeigt. Die allgemeine Syntax lautet
modinfo Modulname
wobei "Modulname" natürlich durch den entsprechenden Modulnamen ersetzt werden muss.
Beispiel:
$ modinfo snd
Ausgabe:
filename: /lib/modules/2.6.20-15-generic/kernel/sound/core/snd.ko alias: char-major-116-* license: GPL description: Advanced Linux Sound Architecture driver for soundcards. author: Jaroslav Kysela <perex@suse.cz> srcversion: 3BE4E61EB0303AD5846B8A6 depends: soundcore vermagic: 2.6.20-15-generic SMP mod_unload 586 parm: major:Major # for sound driver. (int) parm: cards_limit:Count of auto-loadable soundcards. (int)
Wie man sieht erfolgt die Ausgabe zeilenweise sortiert nach verschiedenen Kategorien. Diese sind für alle Module gleich. Interessant ist die Zeile "depends", da man hier sieht, von welchen Modulen dieses Modul abhängt. "Abhängt" bedeutet, dass das entsprechende Modul (oder ggf. auch Module) geladen sein muss, bevor dieses Modul geladen werden kann. Dies ist besonders bei Verwendung von insmod von Interesse.
modinfo kennt einige Optionen, welche in den Manpages von modinfo ausgeführt sind.
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. Dies setzt allerdings voraus, dass die Abhängigkeiten richtig hinterlegt sind, siehe Abschnitt depmod.
Die allgemeine Syntax von modprobe lautet:
modprobe <Optionen> Modulename(n)
Die gängigsten Optionen sind:
Optionen von modprobe | |
Option | Beschreibung |
-v | Man erhält eine ausführliche Ausgabe der Aktionen von modprobe. |
-n oder --dry-run | Simuliert das Laden des Moduls, lädt es aber nicht. |
-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 | Es werden alle Abhängigkeiten des Moduls angezeigt. |
-r | Es werden die angegebenen Module entladen. |
Eine vollständige Übersicht erhält man in den Manpages zu modprobe.
Möchte man ein Modul bei jedem Systemstart laden, so muss man nicht jedes Mal modprobe ausführen, sondern automatisiert den Vorgang.
Module können auch - alternativ zu modprobe - mit dem Befehl insmod geladen werden. Die Verwendung von insmod hat allerdings den Nachteil, dass eventuelle Abhängigkeiten der Module nicht automatisch aufgelöst werden. insmod lädt ein Modul nur, wenn alle Abhängigkeiten erfüllt sind bzw. vorher "von Hand" aufgelöst wurden. Daher wird insmod im täglichen Betrieb eher selten verwendet.
Die allgemeine Syntax von insmod lautet:
insmod Modulname
Eine zweite Möglichkeit, ein Modul aus dem Speicher zu entfernen ("entladen"), ist der Befehl rmmod. Im Gegensatz zu modprobe -r werden Module, die aus Abhängigkeitsgründen zum entfernenden Modul im Kernel geladen wurden, nicht mit entfernt.
Die allgemeine Syntax von rmmod lautet:
rmmod <Optionen> Modulname
Für den "normalen" Betrieb benötigt man in der Regel keine Optionen. Diese sind in den Manpages zu rmmod aufgeführt.
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.
Die allgemeine Syntax von depmod lautet:
depmod <Optionen>
Die zwei wichtigsten Optionen sind:
Optionen von depmod | |
Option | Beschreibung |
-A | Es wird zuerst geprüft, ob neue Module hinzugekommen sind. Wenn nicht wird keine neue Datei erstellt. |
-n | Das Erstellen der neuen Datei wird simuliert, ohne die Aktionen wirklich durchzuführen. |
Die weiteren Optionen sind in der Manpage von depmod aufgeführt.
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. Dazu öffnet man diese Datei mit einem Editor mit Root-Rechten [3] und macht die entsprechenden Einträge, wobei pro Zeile nur ein Modulname eingetragen werden darf. Ab dem nächsten Systemstart werden alle Module (zusätzlich) geladen, die dort eingetragen sind.
Soll ein Modul immer mit einer bestimmten Option geladen werden, kann dies in der Datei /etc/modprobe.conf eingestellt werden. Diese Datei existiert nicht standardmäßig - wenn sie gebraucht wird, muss sie mit Root-Rechten [3] angelegt werden. Es gibt nur einen Eintrag pro Zeile. Um eine Option zu setzen, beginnt man mit einem options
:
options modulname_1 optionenname_1=XX options modulname_2 optionenname_2=YY
Eine weitere Möglichkeit ist, eine Datei /etc/modprobe.d/<Modulname>.conf für ein bestimmtes Kernelmodul bzw. dessen Optionen anzulegen. Die Syntax ist die gleiche.
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 schon einige Einträge in der /etc/modprobe.d/blacklist.conf zu finden.
Die Datei legt man mit einem Editor mit Root-Rechten an [3] (bzw. öffnet eine vorhandene Datei) und fügt einen Dateieintrag nach folgendem Schema hinzu, je ein Eintrag pro Zeile:
blacklist modulname_1 blacklist modulname_2
Die Blacklistdateien haben den Namen blacklist-XYZ.conf, d.h. der Dateiname kann frei gewählt werden, muss aber mit dem Präfix blacklist- beginnen. Darüber hinaus existiert auch eine "allgemeine" Datei, die nur den Namen blacklist.conf trägt.
Manchmal kann es erforderlich sein, den Initram mit dem Befehl update-initramfs -u
zu aktualisieren, wenn die Module trotz Blacklisting nach einem Neustart wieder geladen werden.
Wer wissen möchte, welche Module alle auf dem eigenen Rechner verfügbar sind (nicht geladen!), der kann sich mit dem Befehl [2]
modprobe -l
eine komplette Liste anzeigen lassen. Allerdings ist die Liste extrem lang (der Kernel bringt mehrere hundert Module mit...), daher ist es eventuell günstiger, die Modulverzeichnisse per Dateibrowser zu durchforsten. Die Module liegen alle in den Unterverzeichnissen von /lib/modules/<kernelversion>/kernel/
Module-Assistant - Module nachträglich erstellen und installieren
DKMS - Module automatisch aktualisieren