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.
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.
Zum gegenwärtigen Zeitpunkt (2.0.30) können folgende Bestandteile des Kernels als Modul kompiliert werden:
/proc
)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.