bep*_*ras 49 linux-device-driver
我正在编写简单的Linux模块mod.c. 当我编译mod.c文件,它会创建两个输出文件mod.o和mod.ko.所以我只想知道,mod.o和mod.ko文件有什么区别?
gby*_*gby 45
简短的回答是.ko文件是您的目标文件,链接到内核所需的一些内核自动生成的数据结构.
在的.o文件是模块的目标文件-编译你的C文件的结果.然后,内核构建系统自动创建另一个C文件,其中包含一些描述内核模块的数据结构(名为your_module_kmod.c),将此C文件编译为另一个目标文件,并链接目标文件和它一起构建的目标文件以创建.ko文件.
内核中负责加载内核模块的动态链接器期望找到内核放在.ko文件中的kmod对象中的数据结构,如果没有它们将无法加载内核模块.
Rau*_*ulp 16
在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.