内核模块:.o 与 .ko

zeb*_*aut 10 kernel-modules

似乎包含内核模块的文件被称为.o,至少我在看这样的教程时是这样认为的。但是,在我的 debian 挤压盒上,这些文件似乎被称为.ko.

它是否取决于文件的分布(或其版本)是调用.o还是.ko,并且它们或多或少相同,否则?

J. *_*lor 11

我在这里找到了以下答案:

简短的回答是 .ko 文件是与某些内核自动生成的内核所需的数据结构链接的目标文件。

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

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

同样来自该来源,引用tldp:高达 2.4 内核版本,它是“.o”,从 2.6 开始,它是“.ko”。