Пиша прост Linux модул mod.c. Когато компилирам mod.c файл, той създава два изходни файла mod.o и mod.ko. Така че просто искам да знам каква е разликата между файла mod.o и mod.ko?
Разлика между .o и .ko файл
Отговори (2)
Краткият отговор е, че файлът .ko е вашият обектен файл, свързан с някои автоматично генерирани структури от данни на ядрото, които са необходими на ядрото.
Файлът .o е обектният файл на вашия модул - резултатът от компилирането на вашия C файл. След това системата за изграждане на ядрото автоматично създава друг C файл с някои структури от данни, описващи модула на ядрото (наречен your_module_kmod.c), компилира този C файл в друг обектен файл и свързва вашия обектен файл и обектния файл, който е изградил заедно, за да създаде .koфайл.
Динамичният линкер в ядрото, който отговаря за зареждането на модулите на ядрото, очаква да намери структурата от данни, поставена от ядрото в kmod обекта във файла .ko и няма да може да зареди вашия модул на ядрото без тях.
Преди Linux 2.6 програма за потребителско пространство интерпретираше ELF обектния (.o) файл и вършеше цялата работа по свързването му с работещото ядро, генерирайки готово двоично изображение. Програмата ще предаде това изображение на ядрото и ядрото ще направи малко повече от това да го залепи в паметта. В Linux 2.6 ядрото прави свързването. Потребителска космическа програма предава съдържанието на обектния файл ELF директно на ядрото. За да работи това, изображението на обекта ELF трябва да съдържа допълнителна информация. За да идентифицираме този конкретен вид ELF обектен файл, ние именуваме файла със суфикс ".ko" ("обект на ядрото") вместо ".o" Например драйверът за серийно устройство, който в Linux 2.4 живееше във файла serial.o в Linux 2.6 живее във файла serial.ko.
от http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html .