内核模块:.o 与 .ko

内核模块:.o 与 .ko

似乎包含内核模块的文件被调用.o,至少我在查看类似教程时是这么认为的这个。然而,在我的 Debian 挤压盒上,这些文件似乎被称为.ko.

.o文件是否被称为或,是否取决于发行版(或其版本),.ko否则它们或多或少相同?

答案1

我找到了以下答案这里:

简而言之,.ko 文件是与内核所需的某些内核自动生成的数据结构链接的目标文件。

.o 文件是模块的目标文件 - 编译 c 文件的结果。然后,内核构建系统会自动创建另一个 C 文件,其中包含一些描述内核模块的数据结构(名为 your_module_kmod.c),将此 C 文件编译为另一个目标文件,并将您的目标文件和它构建的目标文件链接在一起以创建 .ko文件。

内核中负责加载内核模块的动态链接器期望找到内核放入 .ko 文件中的 kmod 对象中的数据结构,如果没有它们,将无法加载内核模块。

也来自那个来源,引用tldp:在 2.4 内核版本之前,它是“.o”,从 2.6 开始,它是“.ko”。

答案2

这似乎是一个古老的howto(教程),事实上它是在2005年编写的。当Linux内核是2.4.x时,模块具有.o扩展名,而在2.6中它们变成了.ko

相关内容