Der Linux-Kernel ist
der innerste Teil des Systems. Er ist das elementare Bindeglied
zwischen der Hardware des Rechners und der Software. Genaugenommen
bezeichnet der Begriff Linux nur diesen Betriebssystemkern,
also den Kernel. Die gesamte Software drumherum, wie z.B. die Konsole,
die Anwendungen, usw. gehören zwar zum Gesamtsystem, kommen
aber aus unterschiedlichen Quellen, daher ist auch die korrekte
Bezeichnung GNU/Linux, da die meiste Software dem GNU-Projekt enstammt.
Hardware-Treiber unter Linux werden seit der Kernel Version 2.x
in sogenannten Kernel-Modulen realisiert. Früher mußte
man um z.B. einen neuen Treiber für eine Netzwerkkarte in das
System zu integrieren, den kompletten Kernel neu übersetzen.
Heutzutage ist das etwas einfacher, da lediglich mit Teilen des
Kernels ein Modul übersetzt wird. Module sind Kernel-Teile,
die dynamisch während des laufenden Systems hinzugeladen und
auch wieder entfernt werden können. Um zu wissen, wo denn unsere
Treiber-Module lagern, müssen wir erst einmal die Kernel-Version
herausfinden. Das geht mit:
# uname -rv
2.6.26-1-686 #1 SMP Thu Oct 9 15:18:09 UTC 2008
Durch die Kernel
Bezeichnung 2.6.26-1-686 weiß man, daß das Verzeichnis
für die Kernelmodule /lib/modules/2.6.26-1-686 sein
muß. Eine Liste aller verfügbaren Module kann man sich
mittels folgendem Befehl ausgeben lassen:
# modprobe -l
.....
/lib/modules/2.6.26-1-686/kernel/net/atm/atm.ko
/lib/modules/2.6.26-1-686/kernel/net/atm/br2684.ko
.....
Wie man sieht, haben
Kernelmodule die Endung .ko
Welche Module
gerade geladen sind, erfährt man mit lsmod:
# lsmod
Module Size Used by Not tainted
vfat 10476 0 (unused)
fat 31640 0 [vfat]
ipv6 145108 -1 (autoclean)
.....
Dabei haben die Bezeichnungen
in Klammern folgende Bedeutungen:
autoclean = das Modul wurde automatisch geladen.
[ ] (eckige Klammern) = das Modul wird von einem anderem
Modul benutzt.
-1 (unter used) = Dieses Modul kümmert sich selbst darum,
sich zu entladen, wenn es nicht mehr benötigt wird.
Laden von Modulen
Um nun einen
Treiber für ein bestimmtes Gerät zu aktivieren, muß
das entsprechende Modul in den Kernel geladen werden. Das geht mit
modprobe:
# modprobe bttv
Entladen der Module
Zum entladen der Module benutzt man die Option -r:
# modprobe -r bttv
Hinweis: Module können nur entladen werden, wenn sie
nicht benutzt werden.
Optionen für
Module
Benötigt ein Modul Optionen, müssen diese beim Laden mitgegeben
werden, z.B.
# modprobe bttv card=25
gibt dem Modul bttv die Option card=25 mit.
Informationen über
Module
welche Optionen ein Modul akzeptiert, kann mit dem Befehl modinfo
heraus gefunden werden:
# modinfo bttv
filename: /lib/modules/2.6.26-1-686/kernel/drivers/media/video/bt8xx/bttv.ko
license: GPL
author: Ralph Metzler & Marcus Metzler & Gerd Knorr
description: bttv - v4l/v4l2 driver module for bt848/878 based cards
depends: videobuf-core,videobuf-dma-sg,i2c-core,ir-common,videodev,tveeprom,v4l2-common,btcx-risc,firmware_class,i2c-algo-bit,compat_ioctl32
parm: card:specify TV/grabber card model, see CARDLIST file for
a list
........
Jede Zeile die mit parm: beginnt ist eine mögliche Option
für das Modul.
Dateien für die
Modul-Konfiguration
Leider ist das Laden und Konfigurieren der Module mit modprobe in
der Regel nur temporärer Natur. Möchte man die Optionen
für Module dauerhaft festlegen, gibt es unter Debian ab Kernel
2.6 dafür folgendes Verzeichnis: /etc/modprobe.d/
Frühere Debian-Versionen hatten dafür eine einzige Konfigurations-Datei,
namens /etc/modprobe.conf, jedoch hat man das seit Kernel
2.6 geändert und hat der Modul-Konfiguration ein ganzes Verzeichnis
spendiert, eben modprobe.d/.
Hier können Modul-Optionen dauerhaft gespeichert werden, in
dem man in dem Verzeichnis eine Datei mit beliebigem Namen anlegt
und die Optionen darin angibt. Für die leichtere Orientierung
empfiehlt sich als Name die Bezeichnung des Moduls mit der Endung
.conf, damit man die Datei leichter als Optionen-Konfigurations-Datei
erkennen kann. Für die Zukunft ist die Endung .conf vorgeschrieben.
Ein Beispiel für Optionen einer TV-Karte mit bttv-Chipsatz:
# less /etc/modprobe.d/bttv.conf
options bttv card=25
Aliase
Module können auch unter einem anderem Namen angesprochen werden,
um z.B. der jeweiligen Netzwerkhardware immer die Bezeichnung eth0
zu geben. Um Module unter einem anderem Namen anzusprechen, genügt
eine Zeile in /etc/modprobe.d/aliase, z.B.:
.....
# alias net-pf-1 unix
# alias net-pf-2 ipv4
.....
alias block-major-22-* ide_generic
alias block-major-33-* ide_generic
.....
Bei neueren Debian-Versionen wird allerdings die Bezeichnung
eth0 von udev verwaltet und durch eine udev-Regel der entsprechenden
Netzwerkkarte zugeordnet.
Module beim booten
laden
Normalerweise werden sämtliche Module beim booten von udev
geladen. Sollte es wieder erwarten einmal passieren, daß udev
ein Modul nicht lädt, hilft es, den entsprechenden Modulnamen
in die Datei /etc/modules einzutragen. Optionen kann man
einfach hinter dem Modulnamen angeben. Ein Beispiel für einen
Eintrag:
bttv card=25
Module am Laden hindern
Um Module schon beim Booten am Laden zu hindern, genügt ein
Eintrag in /etc/modprobe.d/blacklist folgender Art:
blacklist bttv
Jedoch können Module noch in der Initial Ramdisk sein und trotzdem
geladen werden. Damit auch das verhindert wird, muß die Ramdisk
neu gebaut werden mit folgendem Befehl:
# update-initramfs -u -k all
Hinweis:
Nähere Informationen über das Verzeichnis /etc/modprobe.d/
liefert
# man modprobe.conf
Theoretisch wenn die Hardware Erkennung funktioniert, hat man mit
dem manuellen laden und entladen von Modulen und ihrer Konfiguration
nichts zu tun, da sie von udev gemanaged werden. Wie allerdings
alle Automatik Funktionen kann auch diese manchmal nicht funktionieren
und man muß von Hand nacharbeiten.
Kernel-Module unter Debian jessie am Laden hindern (blacklisten)
1. Eine Datei unter /etc/modprobe.d/<modulename>.conf mit dem Inhalt blacklist <modulename> erstellen.
2. Den Befehl depmod -ae als root ausführen.
3. Neu erstellen der initrd mittels update-initramfs -u
|