2012-10-07 2 views
5

Ho un paio d'anni di esperienza di programmazione. Ora ho deciso di lavorare allo sviluppo del modulo del kernel Linux. Tuttavia, non riesco nemmeno a iniziare. Ho compilato questo codice in Ubuntu.Come codificare un modulo del kernel Linux?

#include <linux/module.h> 
int init_module(void){ printk("<1> hellp"); return 0;} 
void cleanup_module(void){ printk("<1> bye");} 

tuttavia, l'insmod non funziona il messaggio di errore è "Formato modulo non valido". dopo aver cercato su Google ho pensato che potrebbe esserci qualche problema con la compatibilità della versione. E non c'è un buon modo per risolverlo. Quindi alcuni veri sviluppatori di moduli del kernel possono darmi qualche consiglio? quale ambiente dovrei preparare prima di iniziare l'apprendimento?

Grazie!

risposta

10

Mancano i macro module_init() ee alcuni importanti #defines. Abbiamo bisogno di ulteriori informazioni e anche delle opzioni make/gcc. Potrebbe riportare il "formato modulo non valido" perché stai compilando in 32 bit quando il tuo kernel è a 64 bit, quindi assicurati di utilizzare il flag di compilazione e collegamento -64.

Un grande tutorial di Hello World per i moduli Kernel si trova qui: http://archive.is/KNkEE (il file original link non è funzionante).

Benvenuti nella scrittura dei moduli del kernel. Sono molto divertenti rispetto alla scrittura di driver Windows (ho fatto entrambi). L'interfaccia del modulo del kernel linux è molto più semplice da usare e ci sono molti driver di base a cui è possibile delegare e portare a termine il lavoro più velocemente.

+0

* "Ti manca le macro __init e __exit, ..." * - L'uso di '' __init' e __exit' non sono richiesti; specificano solo le sezioni di testo che possono essere liberate dopo aver completato l'avvio. Ciò che è richiesto per un modulo driver sono le dichiarazioni per due punti di ingresso usando 'module_init()' e 'module_exit()'. – sawdust

1

Un blog completo e semplificato sui kernel di Linux, modulo di programmazione e scrittura di semplici driver di dispositivo per dispositivi embedded.

xploredevicedrivers.blogspot.in