2012-05-07 20 views
38

Sto scrivendo un semplice modulo Linux mod.c. Quando compilo il file mod.c, crea due file di output mod.o e mod.ko. Quindi voglio solo sapere, Qual è la differenza tra il file mod.o e il file mod.ko?Differenza tra file .o e .ko

+1

Penso che .ko siano file oggetto kernel 2.6 mentre .o sono 2.4. Leggi di più qui: http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html – smichak

risposta

34

La risposta breve è che il file .ko è il file oggetto collegato con alcune strutture dati generate automaticamente dal kernel che sono necessarie al kernel.

Il file .o è il file oggetto del modulo, il risultato della compilazione del file C. Il sistema di compilazione del kernel crea automaticamente un altro file C con alcune strutture dati che descrivono il modulo del kernel (chiamato your_module_kmod.c), compila questo file C in un altro file oggetto e collega il file oggetto e il file oggetto creato insieme per creare lo . ko file.

Il linker dinamica del kernel che si occupa di moduli del kernel di carico, si aspetta di trovare la struttura dei dati del kernel mettere nell'oggetto kmod nel file .ko e non sarà in grado di caricare il modulo del kernel senza loro.

12

Prima di Linux 2.6, un programma spaziale utente potrebbe interpretare il file ELF oggetto (.o) e fare tutto il lavoro di collegandola al kernel in esecuzione, generando un'immagine binaria finita. Il programma passerebbe quell'immagine al kernel e il kernel farebbe ben poco più che incollarlo nella memoria . In Linux 2.6, il kernel esegue il collegamento. Un programma utente passa il contenuto del file oggetto ELF direttamente al kernel . Perché ciò avvenga, l'immagine dell'oggetto ELF deve contenere ulteriori informazioni . Per identificare questo particolare tipo di file oggetto ELF, abbiamo denominare il file con suffisso ".ko" ("oggetto kernel") anziché ".o" Per esempio , il driver di periferica seriale che in Linux 2.4 viveva nel file serial.o in Linux 2.6 vive nel file serial.ko.

da http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html.