Es wird normalerweise verwendet, um Hot-Plugging zu unterstützen, indem der Treiber für ein Gerät geladen/eingefügt wird, falls er noch nicht geladen ist.
Hier gibt es eine ähnliche Frage:Erkenne das Vorhandensein eines Geräts, wenn es unter Linux angeschlossen ist
(Aus meiner Ans)
Es funktioniert wie folgt:
-
Jeder Treiber im Code macht seine Hersteller-/Geräte-ID mit:
verfügbarMODULE_DEVICE_TABLE(of, omap_mcspi_of_match); -
Zur Kompilierzeit extrahiert der Erstellungsprozess diese Informationen aus allen Treibern und bereitet eine Gerätetabelle vor.
-
Wenn Sie das Gerät einfügen, verweist der Kernel auf die Gerätetabelle, und wenn ein Eintrag gefunden wird, der mit der Geräte-/Hersteller-ID des hinzugefügten Geräts übereinstimmt, wird sein Modul geladen und initialisiert.
Laut Linux Device Drivers:
MODULE_DEVICE_TABLEwird verwendet, um Kartendateien vondepmodzu generieren Programm;- Wenn das Gerät Hot-Plug-fähig ist, generiert der Bustreiber ein Hotplug-Ereignis. Kernel ruft
/sbin/hotplugauf mit entsprechenden gesetzten Umgebungsvariablen; - Gegebene Kartendateien und Informationen aus der Umgebung,
/sbin/hotplugentscheidet, welches Modul geladen werden soll, und lädt es tatsächlich. Wenn das Modul bereits geladen ist, ist es in Ordnung.
Ich sollte noch einmal erwähnen, dass dieser Mechanismus nur sicherstellt, dass das benötigte Modul vorhanden ist, wenn das Gerät angeschlossen ist. Das verknüpft das Modul nicht mit diesem Gerät oder irgendetwas anderem. Lädt nur das Modul.
Um zu überprüfen, ob der Treiber für ein bestimmtes Gerät in Ordnung ist, match() Funktion von bus_type verwendet wird.
So verstehe ich die Dinge [Xbuntu 14.04 kompatibel].
Sobald wir ein Modul geschrieben haben, können wir es entweder manuell oder automatisch laden.
- Manuell ->
insmodModulname.ko odermodprobModulname.ko -
Automatisch -> Es gibt mehrere Möglichkeiten.
-
kopieren Sie nach /lib/modules/`uname -r`/kernel/modulename.ko und aktualisieren Sie
/etc/modules. Das System lädt das Modul während des Bootens. -
Schreiben Sie ein Skript/einen Befehl zum Laden von module.ko für eine bestimmte Hardware
add/change/removeEreignis in einemudevRegel/etc/udev/rules.d/10-local.rules. Mit dieser Methode können Sie sowohl laden als auch entladen. - Codieren Sie Ihr Modul mit
MODULE_DEVICE_TABLEAnmeldung. Laden Sie dann einmal Ihre modulename.ko und führen Siedepmodaus Befehl [sudo depmod -a], um das neue Modul zu/lib/modules/3.16.0-34-generic/modules.aliashinzuzufügen/lib/modules/3.16.0-34-generic/modules.depDateien. Wie ich weiß, wird das System nur geladen, wenn das Modul nicht geladen ist.
-
Sie können das Laden/Entladen von Modulen mithilfe von udev-Ereignissen überwachen, indem Sie :
verwendenudevadm-Monitor
Befehl.