[Tecnica] Periferiche Linux
Marcello Semboli
dinogen a gmail.com
Gio 17 Set 2015 06:47:37 BST
Bè, direi che dopo questa splendida introduzione ho già le basi che mi
servivano.
Grazie Pragma.!
Il 17/set/2015 12:13 AM, "Szymon Tomasz Stefanek" <pragma a siena.linux.it>
ha scritto:
> On 16/09/2015 22:53, Marcello Semboli wrote:
>
>> Salve,
>> dovrei imparare a gestire delle periferiche su raspberry pi 2.
>> Intendo "gestire" in senso molto lato perché sono quasi totalmente a
>> digiuno di tutto ciò che riguarda la directory /dev.
>> So che esistono i moduli e so che i moduli fanno apparire le periferiche
>> nella directory /dev.
>> Ma non so poi cosa dovrebbe fare un programma per usare la periferica.
>> Non devo padroneggiare l'argomento, devo solo cominciare a capirlo.
>>
>
> Hm... l'argomento di per sè è abbastanza ampio e dipende a che livello
> vuoi arrivare.
> Puoi leggere qualcosa qui: http://www.tldp.org/LDP/tlk/dd/drivers.html .
> Io a suo tempo lessi "Linux Device Drivers" di Rubini, fatto molto bene,
> ma non so se c'è una versione aggiornata per i kernel recenti.
>
> Comunque, sintetizzando.
>
> - Sulla raspberry ci gira linux standard, quindi la gestione delle
> periferiche
> non è particolare.
>
> - La gestione di una periferica varia in funzione del tipo di dispositivo.
>
> - Come hai già accennato, per molti dispositivi (quelli che comunemente
> attacchi
> ad un pc tramite USB, ad esempio) il kernel offre un'interfaccia
> userspace
> accessibile tramite un file in /dev (che poi si chiama "(char o block)
> device")
> Poi ci vuole uno strato software in userspace che di fatto usi la
> periferica
> con il protocollo corretto.
>
> Un esempio:
>
> - Modem 3G connesso via USB.
> Per esempio Alcatel One Touch X230, magari brandizzato da Vodafone o
> qualche
> altra compagnia.
>
> - Il kernel da solo si accorge che c'è un dispositivo connesso su USB e lo
> "aggancia",
> tramite il driver generico USB al suo albero di dispositivi. A questo
> livello vedi
> la periferica tramite lsusb e poco altro.
> $ lsusb
> ...
> Bus 001 Device 028: ID 1bbb:0017 T & A Mobile Phones
> ...
>
> - Il dispositivo espone un identificativo composto da
> <vendor_id>:<device_id>
> (nel nostro caso 1bbb:0017)
>
> - A questo punto serve un driver che sia in grado di riconoscere il
> dispositivo
> e "parlare" con il particolare chip a bordo.
>
> - Se il modulo del driver è già caricato (o il driver è builtin nel
> kernel) allora
> la sua attivazione avviene automaticamente tramite la coppia
> <vendor_id>:<device_id>.
> Se il driver non è caricato allora si può caricarlo tramite modprobe.
> Ci sono dei meccanismi che consentono di caricare automaticamente i
> moduli
> quando viene inserito un dispositivo riconosciuto.
>
> Per il modem in oggetto il driver è usbserial (piùttosto generico).
> Sulla ubuntu il driver viene caricato automaticamente mentre su
> distribuzioni
> "embedded" spesso l'ho dovuto tirare su a mano.
>
> - Il driver riconosce il chip e tipicamente espone un interfaccia
> di tipo seriale associata ad una nuova coppia di numeri (minor/major).
>
> Con il programma mknod puoi creare un "device" dentro /dev (ma anche
> da qualche altra parte) che si "aggancia" alla coppia minor/major e
> permette
> di comunicare con il driver. Per esempio /dev/ttyUSB0.
>
> La /dev/ di quasi tutte le distribuzioni è prepopolata con i device
> più comuni e ci sono dei meccanismi per creare i device automaticamente.
>
> Quindi mknod non si usa quasi più... però è bene sapere che il processo
> teorico sarebbe quello.
>
> - A questo punto un programma userspace, come ad esempio minicom,
> può connettersi al modem e "parlarci" con il relativo protocollo (i
> comandi AT).
>
> Per usare il modem 3G nel mondo reale, poi, hai bisogno di un programma
> più complicato: pppd, che usa sequenze di comandi AT per stabilire una
> connessione remota e tira su tutta la baracca necessaria perchè
> il tuo browser possa fare connessioni TCP attraverso di essa.
>
> Quindi per usare una periferica in generale ci vuole uno "stack" di
> software.
> Nel caso del modem 3G abbiamo:
>
> - Driver usb generico (in kernelspace)
> - Driver dello specifico chip (in kernelspace)
> |
> /dev/ttyUSB0
> |
> - pppd (in userspace)
> |
> ppp0
> |
> - google-chrome
>
> Ci sono diverse varianti di questo schema.
>
> - Alcuni dispositivi hanno driver quasi completamente in userspace. Un
> esempio
> sono dispositivi accessibili tramite libusb, un'altro sono le stampanti
> di rete.
>
> - Le schede video sono bestie molto complicate e i relativi driver a
> livello
> kernel non necessariamente offrono un'interfaccia in /dev.
>
> - Le schede di rete offrono interfacce specializzate (eth0, wlan0 etc..)
> che non stanno dentro /dev.
>
> - Alcuni dispositivi possono offrire più interfacce userspace, anche di
> tipo diverso (ad esempio ci sono chiavette USB che fanno anche storage).
>
> Poi ci sono vari "glitch".
>
> - Alcuni dispositivi USB hanno bisogno di essere "switchati" di modalità
> per poter funzionare. Per questo c'è usb_modeswitch.
>
> - Il kernel non conosce gli ID di tutti i possibili dispositivi
> quindi non è detto che sia in grado di tirare su il driver necessario.
> Non è neanche detto che il driver stesso sia in grado di agganciarsi
> al proprio dispositivo, magari bisogna dargli qualche dritta.
>
> Etc...
>
> Se hai domande specifiche, spara.
>
> --
>
> STS
> _______________________________________________
> Tecnica mailing list
> Tecnica a liste.siena.linux.it
> http://liste.siena.linux.it/cgi-bin/mailman/listinfo/tecnica
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://liste.siena.linux.it/pipermail/tecnica/attachments/20150917/bdf31a52/attachment-0001.htm>
Maggiori informazioni sulla lista
Tecnica