Похоже, что файлы, содержащие модули ядра, называются .o
, по крайней мере, это то, что я рисую при просмотре учебника, подобного этому . Тем не менее, в моем ящике debian, эти файлы, как представляется, называются .ko
.
Зависит ли он от распределения (или его проверки) от того, называются ли файлы .o
или .ko
, и являются ли они более или менее одинаковыми, в противном случае?
Я нашел здесь следующий ответ:
Короткий ответ заключается в том, что файл .ko – это ваш объектный файл, связанный с некоторым ядром, автоматически созданным структурам данных, которые необходимы ядру.
Файл .o – это объектный файл ваших модулей – результат компиляции ваших c-файлов. Затем система сборки ядра автоматически создает другой файл C с некоторыми структурами данных, описывающими модуль ядра (с именем your_module_kmod.c), скомпилирует этот файл C в другой объектный файл и связывает ваш объектный файл и файл объекта, который он создал вместе, чтобы создать .ko файл.
Динамический компоновщик в ядре, отвечающий за загрузку модулей ядра, ожидает найти структуру данных, которую ядро помещает в объект kmod в файле .ko, и не сможет загрузить ваш модуль ядра без них.
Также из этого источника , ссылаясь на tldp : до версии ядра 2.4, это было «.o», а с 2.6 – «.ko».
Это похоже на старое руководство (учебник), в фактах он был написан в 2005 году. Когда ядро Linux было 2.4.x, у модулей было расширение .o, а в 2.6 они стали .ko