Ci sono risorse per imparare a scrivere i driver?


26

Ho una discreta esperienza nella progettazione di hardware e sistemi embedded in generale, ma non ho mai scritto un driver per un sistema operativo.

Vorrei sapere se ci sono buone guide, preferibilmente online, anche se mi interesserebbero dei buoni libri, che mi daranno un buon inizio su ciò che devo sapere per progettare e implementare i driver per un sistema operativo.

Questo probabilmente avrà persone che mi sparano e, anche se mi piacerebbe vedere una buona guida, indipendentemente dal sistema operativo su cui si basa, mi piacerebbe vedere una guida basata su Windows, principalmente a causa del fatto che la maggior parte delle persone Venderei un prodotto con Windows.

Per favore fatemi sapere se ci sono ulteriori informazioni che posso aggiungere per renderlo più chiaro.


1
Ottima domanda, mi interessa anche questo.
Mr. Hedgehog,

Ho accettato la risposta più ampia. Per ottenere informazioni per ciascun sistema operativo, mi è piaciuta la risposta. La risposta di Joby era eccellente specifica per Linux. Ho avuto difficoltà a decidere.
Kortuk,

Risposte:


10

La maggior parte della mia recente esperienza nella scrittura di driver di sistemi operativi effettivi è stata con Linux e il miglior riferimento IMO è Linux Device Driver, 3rd Edition di Jonathan Corbet, Alessandro Rubini e Greg Kroah-Hartman (2005), che è già stato menzionato. È disponibile su Amazon , Safari Books On-Line e anche come download gratuito .

Un altro paio di libri sullo stesso argomento sono Essential Linux Device Driver , di Sreekrishnan Venkateswaran (2008) (disponibile anche su Safari Books Online ) e Writing Linux Device Driver: una guida con esercizi (Volume 3) del Dr Jerry Cooperstein (2009).

Per i driver di dispositivo Windows, l'ultimo libro sull'argomento (pubblicato due settimane fa) sembra essere Windows 7 Device Driver , di Ronald D. Reeves, Ph.D. (2010). È anche disponibile su Safari Books Online .

Un libro più vecchio, che riguarderebbe Windows XP, è: Programmazione del modello di driver di Microsoft Windows, Seconda edizione , di Walter Oney (2002). È anche disponibile su Safari Books Online .

Un altro libro, che sembra essere fuori stampa ma disponibile su Safari Books Online, è Sviluppo di driver con Windows Driver Foundation , di Penny Orwick e Guy Smith (2007). Presumo che coprirebbe Windows Vista.

Infine, Microsoft ha puntato a molti blog ecc. Che discutono dello sviluppo dei driver.


Grazie, suggerirei che il tuo post abbia anche un link a "Driver di dispositivo Linux". Altrimenti, molto approfondito.
Kortuk,

11

Un buon driver incapsula le capacità dell'hardware e le rende disponibili al sistema operativo / alle applicazioni in modo naturale.

Il modo migliore per farlo, dipende molto dal sistema operativo scelto e dal tipo di hardware per il driver.

La mia esperienza è tutta con Linux e piccoli OSen personalizzati in tempo reale.

Per Linux, consiglierei di leggere i driver di dispositivo Linux . Fornisce una buona introduzione ai diversi tipi di driver Linux e alle astrazioni fornite dal sistema operativo.

Dispositivi come le porte seriali in cui i dati vengono letti in sequenza sono generalmente gestiti da driver di dispositivo a caratteri con un nodo del dispositivo nello spazio utenti per le applicazioni da cui leggere. catposso leggere da questi.

I dispositivi ad accesso casuale come la memoria flash e i dischi rigidi sono gestiti da dispositivi a blocchi. ddpossono accedere a questi. Per un buon esempio, dai un'occhiata al sistema MTD Linux .

I driver che si occupano di hardware a basso livello dovranno quasi certamente essere implementati nello spazio del kernel. È possibile scegliere di creare un modulo kernel caricabile in fase di esecuzione o di inserire staticamente il codice nel kernel Linux.

I driver che si basano su driver generici esistenti, come USB, possono essere scritti nello spazio utente. Utilizzando, ad esempio, libusb .


4
Linux Device Driver è un buon libro. Sfortunatamente, queste cose sono altamente specifiche del sistema operativo. Linux è probabilmente il più facile da scrivere, perché ci sono già così tanti driver nella struttura dei sorgenti come riferimento. Se hai scritto codice incorporato per guidare le periferiche di un microprocessore, probabilmente hai una buona conoscenza dei fondamenti del driver di dispositivo.
segna il

sì, sto rimuovendo i miei commenti. colpa mia.
Kortuk,

1
Come indicato dai markrage, il coraggio di un driver, che controlla l'hardware reale, sarà lo stesso sia che tu abbia un sistema operativo o meno. Le principali differenze quando si scrivono i driver sono 1) le interfacce devono adattarsi a un modello standard (ad es. Aprire, chiudere, leggere, scrivere, ioctl) per il sistema operativo e 2) il metodo in cui il driver è installato e attivato.
tcrosley,

1
@tcrosley, Se hai molte informazioni su quelle specifiche mi piacerebbe vedere una risposta al riguardo.
Kortuk,

3

Non ho alcuna esperienza in questo numero, ma ho intenzione di dare i miei due centesimi.

Puoi iniziare qui http://www.osr.com/index.html o qui https://www.osronline.com/index.cfm

Qui in Brasile abbiamo un buon blog su questo problema. È scritto in portoghese e inglese. La maggior parte degli articoli sono purtroppo in portoghese.

C'è un post in portoghese sui libri in questo blog: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http://driverentry.com.br/ blog /% 3Fp% 3D825 & TWU = 1

Spero di aver aiutato un po '


Questo aiuterà molto se faccio la domanda: "Dove imparo il portoghese online in tempo per imparare a scrivere i driver?" Grazie per l'aiuto.
Kortuk,

2
Non preoccuparti di imparare il portoghese. I link sullo sviluppo di unità che ho passato sono in inglese. Anche DriveEntry è scritto anche in inglese. Purtroppo il post sui libri è in portoghese, ma i libri sono in inglese. E ciò che conta di più sono i libri, non la posta.
Daniel Grillo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.