|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
[c ] .. chiarimenti generici sul creare driver in generale
Tempo fa affascinato dalla programmazione ho acquistato un libro sul c anche con la speranza di poter scrivere da solo i driver che mi mancavano con linux .... dopo averlo studiato ero capace di fare calcolatrici e programmi vari ma i driver per me sono sempre stati un mistero ...
cosa bisogna fare per creare un driver? bisogna conoscere l'hardware probabilmente ma come? smontandolo? esiste documentazione? faccio un esempio ....tempo fa ho visto un filmato su come collegare un laser a una porta usb e mi sono chiesto ...' in che dannatissmo modo posso fare un programma che mi fa lampeggiare quel laser????????????' .... so che la domanda è generica e abbastanza assurda ma ... ps. nel regolamento di sezione si dice di specificare il compilatore , mi potreste spiegare il motivo? |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
forse sono stato poco chiaro? XD ......
se è così chiedetemi tutto |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Premetto di non essere un esperto, comunque che io sappia esistono delle librerie che ti mettono a disposizione funzioni bell'e fatte (esempio).
Se invece è proprio il driver che vuoi scrivere, dai un'occhata qui, ma è un mondo per sadici! Ultima modifica di AngeL) : 07-01-2011 alle 12:48. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
cavolo molto interessante questi due link
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
La prima cosa da fare è separare la programmazione di un device driver in due blocchi.
Il primo riguarda l'interfaccia tra i driver e il sistema operativo e trovi un buon tutorial qui http://www.freesoftwaremagazine.com/.../drivers_linux Considera che il driver viene caricato/scaricato/riavviato dal sistema operativo e che tutte le sue funzionalità sono esposte tramite l'interfaccia del sistema operativo, quindi si capisce facilmente che devi sottostare a delle regole specifiche. L'altra parte è ovviamente quella che riguarda come programmare l'hardware e lì dipende tutto dall'hardware. In generale si può dire che il tutto si riduce alla scrittura/lettura di valori da registri specifici della periferica e/o all'invio nella memoria della periferica di dati/programmi ( pensa agli shader delle schede video ). Direi che la parte difficile è capire come la periferica s'interfaccia alla macchina ( una periferica usb pone problemi diversi da una pci express ), quali sono le sue procedure di inizializzazione e programmazione e spesso compaiono cose assurde come i timings, cioè inviati un dato al registro X e poi dopo tot millisecondi leggi dal registro Y. Ovviamente queste informazioni le sa chi fa l'hardware e quindi o usi il reverse engineering per disassemblare i driver ufficiali e capire che fanno o il produttore è così gentile da rendere pubbliche le specifiche. |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
aaa ecco inizio a capire .....
però scusa l'ignoranza ma le faccende riguardanti le porte usb oppure pci ecc non sono gestite già di base dal sistema operativo? devo comunque metterci le mani io?? (che brutta l'ignoranza) |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
una periferica usb, ad esempio, deve capire su quale bus usb si trova, quindi configurarsi di conseguenza, oppure deve tramite plug&play settare l'irq, l'apertura in ram per l'i/o, ecc... |
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
e dimmi una cosa .. questo vale per qualsiasi periferica?
voglio dire una stampante usb ha bisogno di tutto questo, ma per una ventola usb la cui unica funzione è quella di girare alternativamente piano e veloce il discorso resta lo stesso? (abbi pazienza forse sto capendo |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
poi tieni presente che pure la programmazione cambia, perchè se devi inviare un byte al registro 0x4 della periferica non ci puoi arrivare direttamente come si fa ad esempio con l'altoparlante di sistema o il controller della tastiera, ma devi arrivarci tramite usb e quindi devi istruire il bus usb riguardo il trasferimento di dati ( ovviamente il sistema operativo in questo ti aiuta ) |
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 17
|
grande
come faccio a imparare tutte queste cose? conosci qualche documento o qualche link oppure anche solo qualche parola chiave per iniziare la ricerca ..... qualsiasi cosa |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
spassatela http://lwn.net/Kernel/LDD3/
però senza perdere troppo tempo ci sono delle guide sul wiki di osdev.org e osdever.net ovviamente un libro è un libro e 18 capitoli sono difficile da riassumere in un paio di pagine |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:43.




















