Verwalten/Abfragen des Kernel und der Kernelmodulen zur Laufzeit

Wichtung: 4

Beschreibung: Die Kandidaten sollen in der Lage sein, Kernel und Kernelmodule zu verwalten und/oder abzufragen.

Wichtigste Wissensgebiete:
Nutzung von Befehlszeilentools um Informationen über den laufenden Kernel und die geladenen Module zu ermitteln.
Manuelles Laden und Entladen der Kernelmodule.
Feststellen, wann ein Kernelmodul entladen werden kann.
Feststellen, welche Parameter ein Kernelmodul akzeptiert.
Konfiguration des Systems, so dass Module auch unter anderen Namen als ihrem Dateinamen geladen werden können.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/lib/modules/kernel-version/modules.dep
/etc/modules.conf
/etc/modprobe.conf
depmod
insmod
lsmod
rmmod
modinfo
modprobe
uname

Kernel-Module

Stellen Sie sich vor, Sie binden die Unterstützung nahezu jeder Hardware, die es auf dem Markt gibt, fest in den Kernel ein. Ihr Kernel unterstützt 100 Grafikchips, Sie haben aber nur eine Grafikkarte im System. Klar, Sie erhalten einen sehr großen Kernel, der zwar jede Hardware unterstützt, Sie aber nur einen Bruchteil benötigen.

Stellen Sie sich dann noch vor, Sie müssen bei jeder neuen Hardware den kompletten Kernel neu kompilieren. Es wird Ihnen auf Dauer keinen Spaß machen, da dies viel Zeit in Anspruch nimmt.

Genau aus diesem Grund ist der Kernel seit der Version 2 nicht mehr monolithisch und modularisiert wurde. Das heißt, dass Gerätetreiber eben nicht immer fest eingebunden werden müssen, sondern je nach Bedarf nachgeladen werden können. Somit können schlanke Kernel kompiliert werden und Module entsprechend nachgeladen werden, wenn diese benötigt werden.

 // Verzeichnis der Kernelmodule

/lib/modules/[KERNEL-VERSION]

depmod - Abhängigkeiten der Kernelmodule

Das Tool depmod findet die Abhängigkeiten zwischen ladbaren Kernelmodulen und schreibt die dafür zuständige Konfigurationsdatei modules.dep. In der Datei modules.dep stehen dann die entsprechenden Abhängigkeiten jedes einzelnen Moduls. Jedesmal, wenn neue Module ins Modulverzeichnis kopiert werden, muss depmod ausgeführt werden.

lsmod - Anzeigen der geladenen Module

Mithilfe von lsmod kann man sich die geladenen Module anzeigen lassen. lsmod wird ohne Paramater aufgerufen. Beispiel:

# lsmod
Module Size Used by
parport_pc 19280 1 (autoclean)
lp 5248 0 (autoclean)
parport 22240 1 (autoclean) [parport_pc lp]
nfsd 64880 4 (autoclean)
ipv6 124736 -1 (autoclean)
evdev 4160 0 (unused)

insmod - Module laden

Mit dem Befehl insmod werden einzelne Module während der Laufzeit geladen. Im Verzeichnos /lib/modules/[KERNEL-VERSION] befinden sich die Module, welche auf ".o" bzw. ".ko" enden. Wenn das Modul "hermes.o" geladen werden soll, so tippt man folgendes ein:

insmod hermes

Es kann auch sein, dass ein Modul Paramater erwartet:

insmod ra irq=6

Nachteil von insmod: insmod lädt nur das angegebene Modu ohne die Abhängigkeiten zu beachten. Es werden also keine Module automatisch nachgeladen.

modprobe - Nachfolger von insmod

Modprobe baut auf insmod auf, ist aber intelligenter. Modprobe überprüft die Abhängigkeiten von Modulen und lädt Module nach, wenn diese benötigt werden.

# modprobe uhci

rmmod - Entladen von Modulen

Mit rmmod ist es möglich, Module aus dem Kernel zu entladen.

# rmmod uhci

Module können nur dann entladen werden, wenn sie nicht benötigt und nicht in Abhängigkeiten stehen. Mit modprobe können ebenfalls Module entladen werden. Mit der Option -r bewirkt man "ein umgekehrtes modprobe". Die abhängigen Module werden ebenfalls entladen.

# modprobe -r uhci

modinfo - Modul-Parameter auslesen

Module benötigen manchmal Parameter, damit sie richtig geladen werden können. Dies kann vor allem bei Gerätetreiber erforderlich sein. Mit dem Tool modinfo kann man sich zu einem Modul sämtliche Informationen ausgeben lassen:

-n = Dateiname und Pfad der Moduldatei
-d = Beschreibung
-a = Author
-l = Lizenz
-p = Parameter

modinfo serial

oder

modinfo /lib/modules/2.4.17/kernel/drivers/char/serial.o

Dies liefert dann den Pfad zum Modul, eine kurze Beschreibung, den Autor, die Lizenz sowie Informationen über die möglichen Parameter, die man beim Laden des Moduls angeben kann.

/etc/modules.conf - Konfig-Datei für modprobe

modules.conf ist sowohl für insmod, modprobe als auch für depmod wichtig, da hier beispielsweise die Parameter enthalten sind, wie ein Modul geladen wird.

So kann man einen Alias für ein Gerät setzen:

options Modulname Optionen 

// Beispiel - Setzen des Alias für eine
// bestimmte Netzwerkkarte

alias eth0 hermes
options hermes io=0x320 irq=7

Außerdem kann man festlegen, was passieren soll, wenn das Modul geladen bzw. entladen wird:

pre-install Modul Kommando = Vor dem Laden
post-install Modul Kommando = Nach dem Laden
pre-remove Modul Kommando = Vor dem Entfernen
post-remove Modul Kommando = Nach dem Entladen

uname - Kernel-Infos ausgeben

Mit folgenden Parametern kann man sich Informationen zum aktuellen Kernel und das System ausgeben lassen:

$ uname -a
Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown

Optionen:

-a	Print all information
-m Print the machine (hardware) type
-n Print the machine's network node hostname
-r Print the operating system release
-s Print the operating system name
-p Print the host processor type
-v Print the operating system version

Weitere Infos

http://www.linuxfibel.de/kmodule.htm