2011-12-07 7 views
6

Sto cercando di creare un Linux minimalista per un dispositivo incorporato. Ciò significa la necessità di compilare kernel e driver. Un driver è scritto direttamente per la scheda del dispositivo dal suo creatore, quindi non è un repository. Può essere compilato come un modulo del kernel.Compilare un driver come parte di un kernel, non come un modulo

Tuttavia a causa della natura immutabile di Linux e del requisito di un uso estremamente piccolo della memoria, non voglio utilizzare i moduli. Voglio tutti i driver integrati nel kernel. E tutti i driver forniti con il kernel sono impostati in questo modo.

Quindi il mio problema è come compilare quel driver speciale per il kernel?

Tutte le ricerche non mi hanno fornito una soluzione - si tratta solo della compilazione come moduli.

Grazie per qualsiasi aiuto.

+0

Sarebbe necessario mettere il modulo nel sorgenti del kernel, e correggere alcuni dei Makefile per includerlo. Non sono sicuro degli specifici, comunque. Quale modulo stai usando? –

+0

È un autista fatto in casa. So che ho bisogno di aggiungerlo al sorgente del kernel. Tuttavia ho bisogno di alcuni dettagli, come modificare i makefile e così via. –

+1

Possibile duplicato di [Inserire il modulo del kernel linux staticamente] (http://stackoverflow.com/questions/7353851/insert-linux-kernel-module-statically) –

risposta

5

È necessario inserire la sorgente del driver nell'albero dei sorgenti del kernel e aggiornare il makefile per includerlo. È possibile vedere come funziona nei passaggi da 1.1 a 1.3 here.

Se il software a livello utente interagisce con il driver del dispositivo, probabilmente lo fa tramite chiamate di sistema. Cerca tra la fonte del driver alla ricerca di asmlinkage se trovi qualcuno di questi allora stai cercando di aggiungere alcune chiamate di sistema. Il resto del documento sopra spiegherà come impostarli. Dovrai modificare almeno due file (e potrebbero variare leggermente a seconda della versione del tuo kernel).

Se il driver di periferica interagisce direttamente con il kernel, abbiamo a che fare con Interrupt, I/O mappato in memoria o DMA. Per essere onesto con te, non so se possono essere gestiti all'interno del file sorgente del tuo driver (nel qual caso sei bravo a farlo), o se richiedono anche la modifica di altri file nell'albero dei sorgenti. This è una buona risorsa per queste cose.

Good Luck

Problemi correlati