vorrei capire quale e' il processo che porta dal riconoscimento di una periferica fin all' utilizzo da parte del software, tento di spiegarmi un po' meglio
ho comperato uno skypephone, lo inserisco e mi vien fuori in lsusb
Codice: Seleziona tutto
Bus 001 Device 003: ID 04b4:0307 Cypress Semiconductor Corp.
Codice: Seleziona tutto
[ 2224.521297] usb 1-2: new full speed USB device using ohci_hcd and address 2
[ 2225.052178] usb 1-2: configuration #1 chosen from 1 choice
[ 2225.779081] usbcore: registered new interface driver snd-usb-audio
[ 2225.779280] usbcore: registered new interface driver hiddev
[ 2225.795654] hiddev96hidraw0: USB HID v1.10 Device [HID 04b4:0307] on usb-0000:00:02.0-2
[ 2225.795684] usbcore: registered new interface driver usbhid
[ 2225.795691] /build/buildd/linux-2.6.24/drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver
Codice: Seleziona tutto
UEVENT[1221257794.205019] add /devices/pci0000:00/0000:00:02.0/usb1/1-2 (usb)
UEVENT[1221257794.205062] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/usb_endpoint/usbdev1.4_ep00 (usb_endpoint)
UDEV [1221257794.213736] add /devices/pci0000:00/0000:00:02.0/usb1/1-2 (usb)
UEVENT[1221257794.214040] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0 (usb)
UDEV [1221257794.232824] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/usb_endpoint/usbdev1.4_ep00 (usb_endpoint)
UEVENT[1221257794.363735] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2 (sound)
UEVENT[1221257794.363788] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/pcmC2D0p (sound)
UEVENT[1221257794.363805] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/pcmC2D0c (sound)
UEVENT[1221257794.363820] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/dsp2 (sound)
UEVENT[1221257794.363833] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/audio2 (sound)
UEVENT[1221257794.363847] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/controlC2 (sound)
UEVENT[1221257794.363861] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/mixer2 (sound)
UEVENT[1221257794.363875] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.1 (usb)
UEVENT[1221257794.363888] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.2 (usb)
UEVENT[1221257794.363901] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3 (usb)
UEVENT[1221257794.378762] add /class/usb (class)
UEVENT[1221257794.378801] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb/hiddev0 (usb)
UEVENT[1221257794.378816] add /devices/virtual/hidraw/hidraw0 (hidraw)
UEVENT[1221257794.378830] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb_endpoint/usbdev1.4_ep81 (usb_endpoint)
UEVENT[1221257794.378845] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb_endpoint/usbdev1.4_ep04 (usb_endpoint)
UDEV [1221257794.469236] add /class/usb (class)
UDEV [1221257794.497823] add /devices/virtual/hidraw/hidraw0 (hidraw)
UDEV [1221257794.621695] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.1 (usb)
UDEV [1221257794.651868] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0 (usb)
UDEV [1221257794.653792] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2 (sound)
UDEV [1221257794.677879] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/pcmC2D0p (sound)
UDEV [1221257794.695995] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/pcmC2D0c (sound)
UDEV [1221257794.717217] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/dsp2 (sound)
UDEV [1221257794.739630] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/audio2 (sound)
UDEV [1221257794.779720] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/mixer2 (sound)
UDEV [1221257794.785627] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.0/sound/card2/controlC2 (sound)
UDEV [1221257794.836435] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.2 (usb)
UDEV [1221257794.864629] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3 (usb)
UDEV [1221257794.867239] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb/hiddev0 (usb)
UDEV [1221257794.888091] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb_endpoint/usbdev1.4_ep81 (usb_endpoint)
UDEV [1221257794.937760] add /devices/pci0000:00/0000:00:02.0/usb1/1-2/1-2:1.3/usb_endpoint/usbdev1.4_ep04 (usb_endpoint)
/dev/hidraw0 che
/dev/usb/hiddev0
cosa cambia tra i due (intuisco che hidraw contiene i dati grezzi passati dal dispositivo, mentre hiddev0 contiene i dati filtrati, ma da chi e in base a cosa?)
posso ritenere conclusa la fase di riconoscimento del dispositivo, o qualche cosa puo' essere andata storta ed il dispositivo mi e' stato riconosciuto come qualcosa che in realta' non e'? (volgarmente dicendo, mi e' stato caricato il driver per una periferica che non e' corretto?) ed in questo caso sono piu' affidabili i dati di /dev/hidraw0?
girando in giro, ho trovato queste righe di codice che da cio' che ho capito dovrebbero sniffare il dialogo tra la periferica esterna ed il chipset usb interno al pc
Codice: Seleziona tutto
sudo mount -t debugfs none_debugs /sys/kernel/debug
sudo modprobe usbmon
sudo cat /sys/kernel/debug/usbmon/1tora se provo a dare il comando
sudo cat /dev/hidraw0
per vedere cosa passa sul device, ottengo che alla pressione di molti tasti qualcosa succede, il cursore si sposta come se premessi il tasto tab, e/o il tasto invio
se invece do'
sudo cat /dev/usb/hiddev0
ottengo
Codice: Seleziona tutto
�� ��������������
����������������
��
��������������
��
��������������
��
da quest' istante in poi nell' output del comando sudo cat /sys/kernel/debug/usbmon/1t alla pressione di ogni tasto ottengo dei dati tipo
Codice: Seleziona tutto
ef1a5780 3731190906 C Ii:003:01 0 8 = 01030001 01010101
ef1a5780 3731190924 S Ii:003:01 -115 8 <
ef1a5780 3731414914 C Ii:003:01 0 8 = 01000001 01010101
ef1a5780 3731414931 S Ii:003:01 -115 8 <
ef1a5780 3732246961 C Ii:003:01 0 8 = 01090001 01010101
ef1a5780 3732246976 S Ii:003:01 -115 8 <
ef1a5780 3732438979 C Ii:003:01 0 8 = 01000001 01010101
ef1a5780 3732438996 S Ii:003:01 -115 8 <
ef1a5780 3733367025 C Ii:003:01 0 8 = 010f0001 01010101
ef1a5780 3733367042 S Ii:003:01 -115 8 <
ef1a5780 3733591039 C Ii:003:01 0 8 = 01000001 01010101
ef1a5780 3733591057 S Ii:003:01 -115 8 <
quasi come se il valore che c'e' dopo l 'uguale sia quello che leggo in /dev/usb/hiddev0
quindi mi chiedo, se volessi cimentarmi nella scrittura di un programmino che legga il dispositivo (ed in futuro lo scriva pure) dove dovrei prelevare l' output da gestire e filtrare all' interno del sw?
da /sys/kernel/debug/usbmon/1t non credo visto che e' un' output di debug (ma a questo punto a chi serve quest' output, a chi scrive il modulo che poi crea /dev/hiddev0 ?)
da /dev/hidraw0 (grezzi?)
da /dev/usb/hiddev0
se gia' qualcuno ha scritto il modulo che riconosce il dispositivo come hiddev0, perche' non e' stato scritto anche il sw?
in c , i device come si aprono??
troppa fantasia per il mio livello, o la strada e' corretta anche se lunga??
si accettano anche risposte del tipo : " levaci mano...."

