Разлика между .o и .ko файл

Пиша прост Linux модул mod.c. Когато компилирам mod.c файл, той създава два изходни файла mod.o и mod.ko. Така че просто искам да знам каква е разликата между файла mod.o и mod.ko?


person beparas    schedule 07.05.2012    source източник
comment
Мисля, че .ko са 2.6 обектни файлове на ядрото, докато .o са 2.4. Прочетете повече за това тук: tldp.org/HOWTO/Module-HOWTO/linuxversions.html   -  person smichak    schedule 07.05.2012


Отговори (2)


Краткият отговор е, че файлът .ko е вашият обектен файл, свързан с някои автоматично генерирани структури от данни на ядрото, които са необходими на ядрото.

Файлът .o е обектният файл на вашия модул - резултатът от компилирането на вашия C файл. След това системата за изграждане на ядрото автоматично създава друг C файл с някои структури от данни, описващи модула на ядрото (наречен your_module_kmod.c), компилира този C файл в друг обектен файл и свързва вашия обектен файл и обектния файл, който е изградил заедно, за да създаде .koфайл.

Динамичният линкер в ядрото, който отговаря за зареждането на модулите на ядрото, очаква да намери структурата от данни, поставена от ядрото в kmod обекта във файла .ko и няма да може да зареди вашия модул на ядрото без тях.

person gby    schedule 07.05.2012

Преди 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 .

person Raulp    schedule 07.05.2012