ko文件介绍
- .ko文件是kernel object文件(内核模块),该文件作用是把内核的部分功能移动到内核外边,需要的时候插入内核,不需要时卸载。
- 内核模块实现一些函数,作为回调函数注册到内核中。在内核加载/卸载时,或者其他应用程序调用系统调用时,注册的回调函数才得到调用。
动态加载.ko文件示例:
c源码:
// 引入相关内核头文件
#include <linux/module.h>
// 内核模块信息,包括许可证、作者、描述和版本等
MODULE_LICENSE("GPL");
MODULE_AUTHOR("tongyishu");
MODULE_DESCRIPTION("hello world ko");
MODULE_VERSION("1.0");
// 初始化函数,在加载时调用,分配资源准备执行环境,这里只是往内核日志输出一行记录
static int __init hello_init(void)
{
printk(KERN_INFO "HELLO: Hello World, this is hello module speaking
");
return 0;
}
// 清理函数,在卸载时调用,回收资源销毁执行环境
static void __exit hello_exit(void)
{
printk(KERN_INFO "HELLO: Goodbye World
");
}
// 登记初始化函数及清理函数
module_init(hello_init);
module_exit(hello_exit);
Makefile文件:
obj-m+=hello.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules clean
执行 make 命令:
会生成相关文件(包含 .ko 文件):
modinfo hello.ko查看相关信息:
lsmod 查看已经加载的内核模块 :
insmod hello.ko加载内核模块 & dmesg 查看输出:
(dmesg用于查看开机信息)
rmmod hello 卸载内核模块 & dmesg 查看输出: