Подтвердить что ты не робот

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

Я пишу простой модуль Linux mod.c. Когда я компилирую файл mod.c, он создает два выходных файла mod.o и mod.ko. Поэтому я просто хочу знать, В чем разница между файлами mod.o и mod.ko?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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