.ko文件

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文件

 会生成相关文件(包含 .ko 文件):

.ko文件

 modinfo hello.ko查看相关信息:

.ko文件

lsmod 查看已经加载的内核模块 :

.ko文件

insmod hello.ko加载内核模块 & dmesg 查看输出:

    (dmesg用于查看开机信息)

.ko文件

 rmmod hello 卸载内核模块 & dmesg 查看输出:

.ko文件