Модули ядра: .o против .ko

10

Кажется, что файлы, содержащие модули ядра, называются .o, по крайней мере, это то, что я понимаю, когда смотрю на учебник, подобный этому . Тем не менее, на моем Debian Squeeze Box эти файлы, кажется, называются .ko.

Зависит ли это от распространения (или его версии), называются ли файлы .oили .koони более или менее одинаковы в противном случае?

zebonaut
источник

Ответы:

11

Я нашел следующий ответ здесь :

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

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

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

Также из этого источника со ссылкой на tldp : до версии ядра 2.4 это было ".o", а с 2.6 это ".ko".

Дж. Тейлор
источник
3

Это кажется старым практическим руководством (учебник), на самом деле оно было написано в 2005 году. Когда ядро ​​Linux было 2.4.x, модули имели расширение .o, тогда как в 2.6 они стали .ko

asclepix
источник