architettura hardware, dalla periferica al software

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
radiomodel
Prode Principiante
Messaggi: 123
Iscrizione: lunedì 23 ottobre 2006, 19:47
Contatti:

architettura hardware, dalla periferica al software

Messaggio da radiomodel »

salve a tutti, chiedo perdono se saro' molto grezzo nel descrivere cio' che voglio sapere, ma sto iniziando ad addentrarmi ora nell' argomento.

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.
da dmesg vedo

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
con sudo udevmonitor vedo:

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)
quindi da cio' che ho capito, il demone udev, all' inserimento della periferica usb, la riconosce, come si evince da dmesg, e crea due dispositivi, quello audio (che viene riconosciuto ed utilizzato correttamente) ed un dispositivo e quello hid, che pero' non ho ben capito come mai mi viene creato sia

/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/1t
ed in effetti all' inserimento e disinserimento del dispositivo, vedo tante righe di codice scorrere.... ma alla pressione dei tasti sul tastierino numerico del telefono, non succede niente

ora 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...." ;D
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: architettura hardware, dalla periferica al software

Messaggio da Guiodic »

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?
mmm secondo te perché unix tende a vedere tutto come un file?
radiomodel
Prode Principiante
Messaggi: 123
Iscrizione: lunedì 23 ottobre 2006, 19:47
Contatti:

Re: architettura hardware, dalla periferica al software

Messaggio da radiomodel »

Guiodic ha scritto:
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?
mmm secondo te perché unix tende a vedere tutto come un file?
hai ragione mi spiego meglio se apro il file con

stream = fopen("/dev/usb/hiddev0", "r");

debbo lanciare il programma con sudo, se non non me lo apre!!! e' normale???
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: architettura hardware, dalla periferica al software

Messaggio da Guiodic »

sì certo che è normale.
Avatar utente
neonum6
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 633
Iscrizione: sabato 25 febbraio 2006, 17:13
Contatti:

Re: architettura hardware, dalla periferica al software

Messaggio da neonum6 »

radiomodel ha scritto: in c , i device come si aprono??
Come un file :)
Impossible is 0.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti