GNU/Linux >> Znalost Linux >  >> Linux

Těžko pochopit použití MODULE_DEVICE_TABLE(usb, id_table).

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ě:

  1. Každý ovladač v kódu odhaluje své ID dodavatele/zařízení pomocí:

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
    
  2. V době kompilace proces sestavení extrahuje tyto informace ze všech ovladačů a připraví tabulku zařízení.

  3. 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:

  1. MODULE_DEVICE_TABLE se používá ke generování mapových souborů podle depmod program;
  2. 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í;
  3. 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 nebo modprob modulename.ko
  • Automaticky-> Existuje několik způsobů.

    1. zkopírujte do /lib/modules/`uname -r`/kernel/modulename.ko a aktualizujte /etc/modules . Systém načte modul během bootování.

    2. Napište skript/příkaz pro načtení module.ko pro konkrétní harware add /change /remove událost v udev pravidlo /etc/udev/rules.d/10-local.rules . Pomocí této metody můžete provést obě načítání a vyjímání.

    3. Kódujte svůj modul pomocí MODULE_DEVICE_TABLE Registrace. Poté jednou načtěte svůj modulename.ko a spusťte depmod 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.


Linux
  1. Jak najít modul jádra pro dané zařízení?

  2. Linux – Jak znovu připojit logicky odpojené USB zařízení?

  3. Pochopení Persistence zařízení a Oracle ASMLib

  1. Pochopení časových razítek souborů Mac

  2. nastavit zařízení pro vývoj (???????????? žádná oprávnění)

  3. změny parametrů modulu jádra (pomocí /sys/module)

  1. 4 Užitečný způsob, jak zjistit název připojeného zařízení USB v systému Linux

  2. Získání přátelských názvů zařízení v pythonu

  3. je možné probudit linuxové zařízení v určitou dobu