2010-04-21 14 views
21

Recentemente, ho iniziato a sviluppare un driver di un dispositivo incorporato che esegue Linux.Sviluppo nuovo kernel/driver per Linux

Fino ad ora ho solo leggi sugli interni di Linux.
Non avendo esperienza precedente nello sviluppo del guidatore, trovo che sia un po 'difficile raggiungere il mio primo passo.

  • Ho scaricato il codice sorgente del kernel (v2.6.32).
  • Ho letto driver di periferica Linux (non) (3e)
  • Ho letto alcuni post correlati qui su StackOverflow.
  • Capisco che linux abbia un approccio "monolitico". kernel
  • ho costruito (driver esistente incluso nel menuconfig etc.)
  • so le basi di kconfig e Makefile in modo che non dovrebbe essere un problema.

qualcuno può descrivere la struttura (ossia le interrelazioni collegamenti)
delle varie directory nel codice kernel-source.

In altre parole, dato un file di codice sorgente,
che altri file sarebbe fare riferimento al codice relativo

(I -s "# include" forniscono un'idea parziale)

Qualcuno potrebbe aiutarmi a farsi un'idea migliore?
Qualsiasi aiuto sarà molto apprezzato

Grazie.

+0

Questo dovrebbe chiarire. http://www.youtube.com/watch?v=ENNKtfR2PYc –

+0

Scrivi un modulo semplice Hello World per il kernel. Quindi, una volta compreso il modulo del kernel Hello World , scrivi a questo http://www.freesoftwaremagazine.com/articles/drivers_linux e testalo. Segui il link sopra finché non capisci. e leggere anche due dei miei post qui http://mail.nl.linux.org/kernelnewbies/2010-09/ Ho letteralmente combattuto sul forum per capire come funziona. Quindi devi fare lo stesso.Errispetto a quello che qualcuno dice di combattere finché non capisci. Il modo migliore per imparare è prendere un progetto e iniziare a lavorare alla fine ne otterrai molto. Ad esempio decidere di sistemare un –

+0

bug per un driver wireless nel kernel. So che in questa fase suona stanco ma inseguirlo fino a farlo. Alla fine di voi sarete in grado di farlo. –

risposta

18

Dato un file C, è necessario esaminare le funzioni che chiama e le strutture dati utilizzate, piuttosto che preoccuparsi di determinati file.

Ci sono due percorsi di base per sviluppare il proprio driver del dispositivo:

  • Prendete un driver che è simile al vostro; rimuovere il codice non applicabile al dispositivo e inserire un nuovo codice per il dispositivo.
  • Iniziare con i pezzi di base di un driver di periferica e aggiungere pezzi un po 'alla volta finché il dispositivo non inizia a funzionare.

I file che compongono il driver avranno più senso quando si completa questo processo. Prendi in considerazione ciò che appartiene a ciascun file, ma in una certa misura, la suddivisione di un driver tra i file è più un'arte che una scienza. I driver più piccoli spesso si adattano solo a uno o due file.

Un po 'di design può anche essere buono. Considera cosa fa il tuo dispositivo e cosa dovrà fare il tuo autista. Sulla base di ciò, dovresti essere in grado di mappare le funzioni che un driver di dispositivo dovrà avere.

Credo anche che lo Linux Device Drivers, Third Edition possa aiutarti a ottenere lo sviluppo del driver.

Gli stessi file Linux includono file basati su ciò che fanno, su quale livello si trovano e su quale livello accedono allo stack di chiamate. Il Big Picture informa veramente come ogni file è correlato al successivo.

+0

+1 sulla raccomandazione Driver dispositivo Linux – ctuffli

+0

Grazie per la raccomandazione. andrà attraverso il libro con attenzione stasera. Cos'altro?? Un pratico walkthrough chiunque ... – TheCodeArtist

+1

Ci vuole un vero esperto più di poche pagine per camminare attraverso il kernel ... oltre a questo, molte parti del kernel cambiano rapidamente, quindi è fuori dai dati una volta scritta . La soluzione migliore è leggere e comprendere i sottosistemi che ti interessano. – WhirlWind

7

Ho dovuto riparare un driver del kernel una volta. Il mio consiglio più grande (se usi vim) è configurarlo con ctags in modo da poter saltare intorno al sorgente del kernel con ctrl-] ogni volta che vedi una funzione che non capisci.

+2

... lo sto facendo da un po 'ora! E davvero VERAMENTE utile! – TheCodeArtist

+0

@frankster - ottimi consigli, grazie – artm

Problemi correlati