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_TABLE
se používá ke generování mapových souborů podledepmod
program;- Když je zařízení připojeno za provozu, ovladač sběrnice vygeneruje událost hotplug. Volání jádra
/sbin/hotplug
s příslušnými nastavenými proměnnými prostředí; - Vzhledem k mapovým souborům a informacím z prostředí
/sbin/hotplug
rozhodne, 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ě ->
insmod
modulename.ko nebomodprob
modulename.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
/remove
událost vudev
pravidlo/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_TABLE
Registrace. Poté jednou načtěte svůj modulename.ko a spusťtedepmod
pří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.dep
soubory. 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.