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 |
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.