Ein Kernelmodul unter Linux (siehe auch LinuxKernel) ist etwas sinngemäß ähnliches, wie ein "Treiber" unter anderen Betriebssystemen - nur besser, denn man kann ein LKM (Linux Kernel Modul) zur Laufzeit laden und auch wieder entladen (ohne Neustart ;).
Beim Linux-Kernel kann man es sich beim Übersetzen raussuchen, ob ein "Treiber" fest im Kernel oder als LKM übersetzt wird. LinuxDistributionen sind i.d.R. voll modularisiert, haben also praktisch alle Treiber als LKM.
Mini-Howto
Infos über ein Modul (insbesondere Modulparameter) |
modinfo modul |
geladene Module anzeigen |
lsmod oder cat /proc/modules |
Modul laden (primitiv) |
insmod modul |
Modul laden (Komfort-Version, lädt auch Abhängigkeiten) |
modprobe modul |
Modul entladen |
rmmod modul |
erste Hilfe |
man modprobe.conf |
Module bevorzugen
Es ist möglich und manchmal auch sinnvol bestimmte Module anderen vorzuziehen.
Es ist zum Beispiel auf aktueller Hardware sinnvoll, das Modul twofish-x86_64.ko anstelle von dem automatisch ausgewählten twofish.ko zu laden.
Die Konfiguration bei aktuellen modutilities wird in den Dateien, die mit .conf enden und im Verzeichnis /etc/modprobe.d gespeichert sind, abgelegt.
Um nun das eine Modul zu bevorzugen, erstellt man eine Datei, die mit .conf endet und gibt dieser folgenden Inhalt:
install twofish /bin/modprobe twofish-x86_64
Nun ist es notwendig, die geändere Konfiguration mit dem Befehl depmod -a zu übernehmen.
Damit wird beim Versuch das Modul twofish.ko zu laden, anstelle dessen alle anschließenden Befehle ausgeführt.
Konfiguration bei älteren modutilities
Der folgende Text bezieht sich auf ältere modutilities und ist damit veraltet!
Einstellungen zu Modulen (Parameter, Ladeskripte, etc) kann man über die Datei /etc/modules.conf festlegen. Nach einer Änderung muss man das Programm depmod ausführen. Die Datei wird nur in Verbindung mit modprobe wirksam, nicht mit insmod.
Einstellungen in modules.conf
|
Beispiel |
|
Modulparameter |
options modul parameter |
options 3c59x full_duplex=1 |
Modul einem Gerät zuordnen |
alias gerät modul |
alias eth0 3c59x |
Befehl nach dem Laden ausführen |
post-install modul befehl |
post-install ip_conntrack modprobe ip_conntrack_ftp |
Befehl vor dem Entladen ausführen |
pre-remove modul befehl |
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || : |
Weitere Möglichkeiten stehen in der ManPage zu modules.conf.
Normalerweise geschieht das Laden von Modulen vollautomisch durch kmod, den Kernel-Modul-Lader (in Verbindung mit modprobe). Bei manchen Konstellationen kann es notwendig sein, Module von Hand zu laden; wie man das elegant lösen kann, zeigt dieses /LadeSkript.
F: Wenn der Treiber für eine Hardwarekomponente nicht in der jeweiligen Distribution enthalten ist, wie wird er dann installiert?
A: Da gibt es mehrere Möglichkeiten:
entweder der Hardwarehersteller (oder jemand anderes) bietet fertige Kernelmodule für bestimmte Kernelversionen an, dann kann man die einfach mit insmod laden
- oder es wird von Drittseite Quellcode angeboten, dann liegt i.d.R. dort auch eine Anleitung bei
oder die Unterstützung ist in einer neueren Kernelversion vorhanden, dann besorgt man sich diese, siehe LinuxKernel
F: Wie erkenne ich ein LKM?
A: Dies ist von der Version des Kernels abhängig. Ein Kernel der Version 2.4.* haben die Treiber eine ".o"-Endung. Bei 2.6.*-Kernelversionen endet der Treibername auf "*.ko". Beispiel: "snd-intel8x0m.ko" oder "snd-intel8x0m.o"
F: Wie erkennt man, welche Module zu welchem Kernel passen?
A: Das sollte dabeistehen und im Zweifelsfall kann man es auch einfach probieren, das merkt man dann schon, ob es sich laden lässt oder nicht.