Inhalt

9. Module

Ladbare Kernel-Module können Hauptspeicher sparen und vereinfachen meist die Konfiguration eines Systems. Die neue Red Hat-Distribution hat z.B. nur noch eine einzige Bootdiskette für alle Konfigurationen. Inzwischen können fast alle optionalen Kernel-Teile als Module konfiguriert werden: Dateisysteme, Netzwerk-Karten, serielle und parallele Schnittstellen, Bandlaufwerke, Drucker usw.

9.1 Installation der Hilfsprogramme

Das Hinzufügen und Entfernen der Module zum Kernel wird von einigen externen Programmen erledigt. Diese gehören nicht zur Standard-Kerneldistribution und müssen extra installiert werden. Man bekommt sie von denselben Servern wie auch den Kernel unter dem Namen modules-x.y.z.tar.gz. Man sollte dabei dasjenige Paket mit derselben oder, falls es das nicht gibt, mit der nächstkleineren Versionsnummer wie der verwendete Kernel benutzen. Nach dem Auspacken des Paketes mit

# tar zxvf modules-x.y.z.tar.gz

findet man in dem neu angelegten Verzeichnis modules-x.y.z eine README-Datei, die man aufmerksam lesen sollte. Darin werden auch Anweisungen zur Installation gegeben; dies beschränkt sich aber eigentlich immer auf ein einfaches make install. Dabei sollten die folgenden Programme im Verzeichnis sbin installiert werden: insmod, rmmod, ksyms, lsmod, genksyms, modprobe und depmod.

Im Unterverzeichnis insmod des Modul-Paketes ist auch ein kleines Beispiel für einen ladbaren Treiber enthalten (/dev/hw). Wer Lust hat, kann damit ein wenig herumspielen, die Datei INSTALL gibt dazu ein paar Hinweise.

insmod dient dazu, ein Modul in den laufenden Kernel einzufügen. Normalerweise handelt es sich bei den Modulen um Binärdateien mit der Endung .o. Der Beispieltreiber heißt z.B. drv_hello.o. Um diesen einzufügen, lautete der Befehl also:

# insmod drv_hello.o

Um zu sehen, welche Module gerade im Kernel geladen sind, dient der Befehl lsmod:

# lsmod
Module:        #pages:  Used by:
drv_hello          1

drv_hello ist der Name des Modules; es belegt eine »Page« (Seite, entspricht 4 kB) im Speicher. Keine weiteren Module des Kernels sind von ihm abhängig.

Um das Modul wieder zu entfernen, wird folgender Befehl verwendet:

# rmmod drv_hello

Wichtig ist hierbei, daß rmmod den Namen des Modules, so wie er von lsmod angezeigt wird, und nicht den Dateinamen als Argument benötigt.

Die Manual Pages der Modul-Programme geben weitere Informationen über deren Zweck und Optionen.

9.2 Die Module der Standard-Kerneldistribution

Zum gegenwärtigen Zeitpunkt (2.0.30) können folgende Bestandteile des Kernels als Modul kompiliert werden:

Um diese zu benutzen, darf man sie nicht in den eigentlichen Kernel einbinden, d.h. während des make config darf man die entsprechenden Fragen nicht mit y beantworten, sondern mit m für Modul. Nachdem der Kernel wie bereits beschrieben kompiliert und installiert wurde, müssen die Module dann extra mit dem Befehl

# make modules

übersetzt werden. Mit

# make install

werden die übersetzten Module dann im Verzeichnis /lib/modules/x.y.z installiert, wobei x.y.z die verwendete Kernel-Version ist. Von dort können sie dann mit dem Befehl lsmod oder modprobe geladen werden. Der Vorteil von modprobe gegenüber lsmod ist dabei, daß der volle Pfad des Modules nicht angegeben werden muß. modprobe sucht automatisch in /lib/modules/x.y.z. Außerdem wird immer die richtige Version des Moduls, passend zum gerade laufenden Kernel, gelesen. Wer gerne mit verschiedenen Kernels experimentiert, wird das schnell zu schätzen wissen.

Ladbare Module sind ganz besonders für nur selten benutzte Dinge praktisch, ein gutes Beispiel sind Dateisysteme. Wer nur ab und zu mal eine Diskette mit dem MSDOS FAT-Dateisystem mounten muß, kann das entsprechende Modul (msdos.o) nur bei Bedarf laden und so unter Normalbedingungen etwa 50 kB an RAM einsparen. Noch komfortabler wird das Ganze, wenn man kerneld verwendet. Dies ist ein automatischer Modul-Lader, der benötigte Module selbsttätig in den Kernel lädt, sobald das entsprechende Gerät oder Protokoll benötigt wird, und es, wenn es nicht mehr in Benutzung ist, auch wieder entfernt.

Diese und viele weitere Feinheiten im Umgang mit den Modulen werden im Module-HOWTO beschrieben.


Inhalt