GNU/Linux >> Linux Esercitazione >  >> Linux

Difficile capire l'utilizzo di MODULE_DEVICE_TABLE(usb, id_table).

Di solito viene utilizzato per supportare l'hot plug, caricando/inserendo il driver per un dispositivo se non è già caricato.

C'è una domanda simile qui:Rileva la presenza di un dispositivo quando è collegato a caldo in Linux

(Dalla mia risposta)

Funziona come segue:

  1. Ogni driver nel codice espone il proprio ID fornitore/dispositivo utilizzando:

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
    
  2. Al momento della compilazione il processo di compilazione estrae queste informazioni da tutti i driver e prepara una tabella dei dispositivi.

  3. Quando inserisci il dispositivo, il kernel fa riferimento alla tabella dei dispositivi e se viene trovata una voce che corrisponde all'id del dispositivo/fornitore del dispositivo aggiunto, il suo modulo viene caricato e inizializzato.


Secondo Linux Device Drivers:

  1. MODULE_DEVICE_TABLE è usato per generare file mappa da depmod programma;
  2. Quando il dispositivo è collegato a caldo, il driver del bus genera un evento hotplug. Il kernel chiama /sbin/hotplug con opportune variabili ambientali impostate;
  3. Dati i map file e le informazioni dall'ambiente, /sbin/hotplug decide quale modulo caricare e lo carica effettivamente. Se il modulo è già caricato, va bene.

Dovrei menzionare ancora una volta che questo meccanismo garantisce solo che il modulo necessario sia in posizione quando il dispositivo è collegato. Questo non collega il modulo con quel dispositivo o altro. Carica solo il modulo.

Per verificare se il driver è OK per un dispositivo specifico, match() funzione da bus_type viene utilizzato.


Ecco come capisco le cose [compatibile con Xbuntu 14.04].

Una volta scritto un modulo, possiamo caricarlo manualmente o automaticamente.

  • Manualmente -> insmod modulename.ko o modprob nomemodulo.ko
  • Automaticamente-> Esistono diversi modi.

    1. copia in /lib/modules/`uname -r`/kernel/nomemodulo.ko e aggiorna /etc/modules . Il sistema caricherà il modulo durante l'avvio.

    2. Scrivi uno script/comando per caricare module.ko per uno specifico harware add /change /remove evento in un udev regola /etc/udev/rules.d/10-local.rules . Puoi eseguire sia il caricamento che lo scaricamento utilizzando questo metodo.

    3. Codifica il tuo modulo con MODULE_DEVICE_TABLE registrazione. Quindi carica il tuo modulename.ko una volta ed esegui depmod comando [sudo depmod -a ] per aggiungere il nuovo modulo a /lib/modules/3.16.0-34-generic/modules.alias /lib/modules/3.16.0-34-generic/modules.dep File. Come so, il sistema verrà caricato solo se il modulo non è caricato.

Puoi monitorare il caricamento/scaricamento del modulo usando gli eventi udev usando :

monitor udevadm

comando.


Linux
  1. Linux:come riconnettere un dispositivo USB disconnesso logicamente?

  2. Ottenere nomi di dispositivi amichevoli in Python

  3. configurare il dispositivo per lo sviluppo (???????????? nessuna autorizzazione)

  4. modifiche ai parametri del modulo del kernel (usando /sys/module)

  5. Comprensione dei driver di dispositivo Linux della webcam

Come trovare l'utilizzo della larghezza di banda del dispositivo USB su Linux

Timekpr:controlla l'utilizzo del computer degli account utente

Controlla l'utilizzo di RAM e CPU da parte di Kodi in tempo reale

Comprendere il comando dell'ora in Linux

Comprensione dei profili ottimizzati consigliati da RedHat

In che modo il tempo della CPU e l'utilizzo della CPU sono uguali?