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
risposta
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.
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.
- 1. Differenza tra "o" e "||"
- 2. Differenza tra file .keystore e .jks file
- 3. Differenza tra file HDF5 e file PyTables
- 4. Differenza tra -O del GHC e -O2
- 5. Differenza tra Camera.translate e Matrix.preTranslate o Matrix.postTranslate?
- 6. Differenza tra xreadlines e-loop un file
- 7. Differenza tra file .jar e .dll
- 8. Differenza tra fla, swf e come file
- 9. Differenza tra "test -a file" e "test file -ef file"
- 10. Differenza tra FILE * "/ dev/stdout" e stdout
- 11. Differenza tra oggetto codice e file eseguibile
- 12. Modulo Kernel Linux (* .ko) compatibilità tra i kernel
- 13. differenza tra porte I/O e memoria I/O
- 14. MySQL: Differenza tra ",", "e"
- 15. Differenza tra ". +" E ". +?"
- 16. Differenza tra numpy.logical_and e &
- 17. Differenza tra oggetto e *?
- 18. Differenza tra | e || o & e && per il confronto
- 19. Differenza tra fclose e close
- 20. C# I/O - Differenza tra System.IO.File e StreamWeader/StreamReader
- 21. CMake: differenza tra $ {} e "$ {}"
- 22. Differenza tra web.config e machine.config?
- 23. La differenza tra $ * e $ @
- 24. Differenza tra IOError e OSError?
- 25. Differenza tra getch() e _getch()
- 26. Differenza tra un file .msg e un file .eml
- 27. Differenza tra file helper e file lib nelle guide
- 28. Differenza tra StreamReader.Read e StreamReader.ReadBlock
- 29. Differenza tra java.io.PrintWriter e java.io.BufferedWriter?
- 30. differenza tra -lgcc_s e gcc
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