linux的.ko与.so文件

在Linux系统上,.ko文件代表内核对象(KernelObject)文件,它是一种将内核函数移出内核、需要时将其带入内核、不需要时将其卸载的方法。
这种设计有两个主要优点:一是可以减小核心尺寸,二是使用方便。
加载内核模块可以通过两种方法实现:直接使用insmod命令执行加载操作,或者先将模块复制到特定目录(根据内核版本/lib/module/#uname-r#/)然后运行depmod生成依赖文件,最后调用modprobe加载。
加载驱动模块后,使用lsmod命令查看已加载模块的列表,并使用rmmod命令卸载它。
与.so文件相比,.ko文件专门用于内核扩展功能。
.so文件与C语言动态链接库(DynamicLinkLibrary)相关联。
在C编程中,调用动态库主要有两种方式:一种与调用静态库类似,即通过头文件直接调用库中的函数,通过函数dlopen和dlsym在动态程序启动时加载库文件加载库不需要直接调用头文件。
当程序在指定位置运行时,会加载库文件。
这样,编译时就不需要指定库的位置和文件名,但必须使用dlopen将库加载到代码中,并使用dlsym根据符号查找函数的地址。
两种方法各有优点,可以根据项目的需要灵活选择。

Linux中后缀名为ko.o.a.so.la的文件介绍

不过为了区分,有些文件还是加了后缀:1..ko是KernelObject的缩写,是Linux2.6内核使用的动态链接文件。
Linux系统启动时会加载内核模块。
2..o相当于Windows中的.obj文件。
注意:.ko和.o的区别在于,.ko是Linux2.6内核编译后生成的,其中包含一些附加的模块信息,例如作者、许可证等。
.o文件是由linux2.4内核编译生成的。
3..a是由多个.o组成的静态库,用于静态链接4..so是SharedObject的缩写,用于动态链接,类似于WindowsDLL5。
.la由libtool共享库自动生成。