Ho imparato la programmazione del kernel e l'assunzione dello Eudyptula challenge e l'attività 5 mi richiede di modificare un modulo Hello World da un'attività precedente per essere caricato automaticamente quando una tastiera USB è collegato e scaricato quando la tastiera è scollegata.modules.usbmap e modules.pcimap mancanti su distro basato su Ubuntu
Ora, per il gusto di farlo, non invierò qui il mio codice, perché sarebbe un enorme spoiler per questo compito e rovinerebbe il divertimento per gli altri. In sostanza, ciò che fa è:
- crea una matrice
struct usb_device_id
con una voce che si lega il mio modulo a qualsiasi tastiera USB - Crea un
struct usb_driver
e inizializza i campi appropriati; in particolare, fa riferimento all'array di tabella id del dispositivo USB che ho creato in precedenza - Utilizza la macro
MODULE_DEVICE_TABLE
per registrare il driver.
Il registro/routine deregistrare stanno lavorando. Ottengo i messaggi di debug attesi quando carico e scarica manualmente il modulo.
Ho copiato il modulo su /lib/modules/$(uname -r)
e ho eseguito depmod -a
. Il modulo viene aggiunto a modules.alias
e modules.dep
, ma non accade nulla quando collego/scollego la tastiera.
Ulteriori ricerche hanno dimostrato che dovrei avere un file modules.usbmap
generato da depmod
dove il kernel mantiene una mappatura tra dispositivi e driver da caricare. Non ho questo file da nessuna parte nell'albero delle mie cartelle. Inoltre non ho uno modules.pcimap
. Ho controllato la configurazione del kernel per assicurarmi che il supporto del modulo caricabile sia abilitato, così come il supporto hotplugging - lo sono.
Si tratta di Kubuntu 14.04 con il kernel 3.16.0-rc5 auto-compilato. Cosa mi manca? Ho seguito la configurazione del kernel e ho controllato le opzioni più ovvie. Sono un po 'bloccato qui. Qualche idea?
Alla fine ce l'ho fatta, anche se non ho mai caricato il modulo ogni volta che ho collegato/scollegato la tastiera. Apparentemente, avevo un problema simile a http://www.linuxquestions.org/questions/programming-9/driver-development-usbhid-is-blocking-custom-device-driver-850287 - se scarico 'usbhid', allora il mio modulo funziona come previsto. –