Wenn der Kernel ein neues Gerät erkennt, führt er das Programm aus modprobe
und übergibt ihm einen Namen, der das Gerät identifiziert. Die meisten Geräte werden durch registrierte Nummern für einen Hersteller und ein Modell identifiziert , z. B. PCI- oder USB- Kennungen. Das modprobe
Programm durchsucht die Modul-Alias-Tabelle nach dem Namen der Datei, die den Treiber für dieses bestimmte Gerät enthält. Ein ähnliches Prinzip gilt für Treiber für Dinge, die keine Hardwaregeräte sind, wie Dateisysteme und kryptografische Algorithmen. Weitere Einzelheiten finden Sie unter Debian erkennt nach dem Neustart keine serielle PCI-Karte/lib/modules/VERSION/modules.alias
Sobald modprobe identifiziert hat, welche Moduldatei ( .ko
) den angeforderten Treiber enthält, lädt es die Moduldatei in den Kernel: Der Modulcode wird dynamisch in den Kernel geladen . Wenn das Modul erfolgreich geladen wurde, wird es in der Liste von angezeigt lsmod
.
Das automatische Laden von Modulen erfolgt, wenn der Kernel neue Hot-Plug-fähige Hardware erkennt, z. B. wenn Sie ein USB-Peripheriegerät anschließen. Das Betriebssystem führt auch einen Durchlauf durch, bei dem die gesamte Hardware, die sich zu Beginn des Startvorgangs auf dem System befindet, aufgelistet wird, um Treiber für Peripheriegeräte zu laden, die zum Zeitpunkt des Startvorgangs vorhanden sind.
Es ist auch möglich, das Laden eines Moduls manuell mit dem Befehl modprobe
oder anzufordern insmod
. Die meisten Distributionen enthalten ein Startskript, das die in aufgelisteten Module lädt /etc/modules
. Module können auch geladen werden, wenn sie von einem Modul abhängen: Wenn Modul A von Modul B abhängt, wird modprobe A
B vor dem Laden von A geladen .
Sobald ein Modul geladen ist, bleibt es geladen, bis es explizit entladen wird, selbst wenn alle Geräte, die diesen Treiber verwenden, getrennt wurden. Vor langer Zeit gab es einen Mechanismus zum automatischen Entladen nicht verwendeter Module, der jedoch entfernt wurde, wenn ich mich richtig erinnere, als udev auf die Bühne kam. Ich vermute, dass das automatische Entladen von Modulen kein alltägliches Merkmal ist, da die Systeme, die es normalerweise benötigen würden, meistens Desktop-PCs sind, die sowieso viel Speicher haben (auf der Skala des Treibercodes).
/etc/modules
.rt2800usb
ist in der Ausgabe vonlsmod
und bedeutet das, dass ich sein Gerät vor dem Booten an meinen Computer angeschlossen habe?/etc/modules
ist, liegt dies vermutlich daran, dass das Gerät irgendwann vorhanden war.Module werden geladen, wenn das System über die Initial RAM Disk (initrd) gestartet wird . In der Begründung heißt es:
Ubuntu lädt wie viele andere Distributionen jeden Gerätetreiber in diese initrd, unabhängig davon, ob der Treiber benötigt wird oder nicht, und auch unabhängig davon, ob das Gerät auf dem System vorhanden ist oder nicht. Wie Giles betonte, wird das Ganze in den RAM geladen, und dann werden die verwendeten Module beim Start erkannt und die nicht verwendeten werden aus dem RAM entfernt. Durch diese Vorgehensweise wird sichergestellt, dass Ubuntu unabhängig vom Setup auf jedem System gestartet wird. Ubuntu ahmt einen monolithischen Kernel mit Hilfe von Mikrokernel-Konstrukten nach. Siehe Der Grund, warum dies funktioniert
rt2800usb
wird immer beim Booten geladen werden , da das Modul in dem aufgenommen wurde Initramfs dass Gilles bezeichnet. Das initramfs ist ein Nachfolger des initrd, daher wird es immer von angezeigtlsmod
. Beachten Sie, dass Sie ein neu kompiliertes Modul in den Kernel einfügen können, indem Siemodprobe
gefolgt vom Modulnamen verwenden.Starten Sie Ihr System zum Test neu, während der WLAN-Adapter nicht angeschlossen ist. Wenn alles
lsmod
in Ordnung ist, wird das Modul nicht in der Ausgabe aufgeführt, da der vom initramfs und dem init-System während des Startvorgangs gestartete Erkennungsprozess das Gerät nicht gefunden hat und das Modul aus dem RAM entfernt wurde.rmmod
odermodprobe -r
gefolgt vom Modulnamen verwenden. Beim nächsten Start wird das Modul neu geladen. Siehe oben. In den meisten Fällen wird ein Modul nicht dynamisch entfernt, da dies das Hotplugging deaktiviert, dh wenn ein Modul entfernt wird, kann das Gerät, das es verwendet, beim erneuten Einstecken nicht mehr erkannt werden.Um ein Modul aus zu entfernen
lsmod
, müssen Sie es aus dem initramfs-Image entfernen, das durch erneutes Kompilieren des Kernels ohne das ausgewählte Modul und anschließendes Neuerstellen des Images erstellt wurde. Auf diese Weise wird die gesamte Erkennung des Moduls deaktiviert.quelle
/sys
und Laden der Treiber für Geräte, die sich tatsächlich im System befinden. Dies geschieht unabhängig davon, ob das Gerät beim Start vorhanden ist oder später im laufenden Betrieb angeschlossen wird.udev
Es hat viel mehr damit zu tun als initramfs / initrd, und es/etc/initramfs-tools/initramfs.conf
ist nicht besonders relevant , ob alle, die meisten oder nur einige Module in das initramfs kopiert werden (eine Konfigurationsoption in ).