Obvykle se používá k podpoře připojování za provozu načtením/vložením ovladače pro zařízení, pokud ještě není nahráno.
Zde je podobná otázka:Zjistit přítomnost zařízení, když je v Linuxu zapojeno za chodu
(Od mých ans)
Funguje následovně:
-
Každý ovladač v kódu odhaluje své ID dodavatele/zařízení pomocí:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match); -
V době kompilace proces sestavení extrahuje tyto informace ze všech ovladačů a připraví tabulku zařízení.
-
Když vložíte zařízení, jádro odkazuje na tabulku zařízení, a pokud je nalezen záznam odpovídající ID zařízení/prodejce přidaného zařízení, je načten a inicializován jeho modul.
Podle ovladačů zařízení Linux:
MODULE_DEVICE_TABLEse používá ke generování mapových souborů podledepmodprogram;- Když je zařízení připojeno za provozu, ovladač sběrnice vygeneruje událost hotplug. Volání jádra
/sbin/hotplugs příslušnými nastavenými proměnnými prostředí; - Vzhledem k mapovým souborům a informacím z prostředí
/sbin/hotplugrozhodne, který modul načíst a skutečně jej nahraje. Pokud je modul již načten, je to v pořádku.
Znovu bych měl zmínit, že tento mechanismus pouze zajišťuje, že potřebný modul je na svém místě, když je zařízení zapojeno. To nepropojuje modul s tímto zařízením ani s ničím jiným. Právě načte modul.
Chcete-li zkontrolovat, zda je ovladač pro konkrétní zařízení v pořádku, match() funkce z bus_type se používá.
Zde je návod, jak rozumím věcem [kompatibilní s Xbuntu 14.04].
Jakmile modul napíšeme, můžeme jej načíst buď ručně, nebo automaticky.
- Ručně ->
insmodmodulename.ko nebomodprobmodulename.ko -
Automaticky-> Existuje několik způsobů.
-
zkopírujte do /lib/modules/`uname -r`/kernel/modulename.ko a aktualizujte
/etc/modules. Systém načte modul během bootování. -
Napište skript/příkaz pro načtení module.ko pro konkrétní harware
add/change/removeudálost vudevpravidlo/etc/udev/rules.d/10-local.rules. Pomocí této metody můžete provést obě načítání a vyjímání. - Kódujte svůj modul pomocí
MODULE_DEVICE_TABLERegistrace. Poté jednou načtěte svůj modulename.ko a spusťtedepmodpříkaz [sudo depmod -a] a přidejte nový modul do/lib/modules/3.16.0-34-generic/modules.alias/lib/modules/3.16.0-34-generic/modules.depsoubory. Jak vím, systém se načte pouze v případě, že modul není načten.
-
Načítání/vykládání modulů můžete sledovat pomocí událostí udev pomocí :
udevadm monitor
příkaz.