您的位置:首页 > 运维架构 > Linux

linux添加可加载内核模块(LKM入门)

2012-03-08 21:45 1076 查看
学习linux内核编程,LKM(可加载内核模块)是非常有用的一部分。LKM是内核的扩展,可以随时加载到内核中,用完后也可以方便的卸载,是扩展linux内核功能的有效手段。

下面编写一个简单的模块,并实现加载:

代码如下:

/*hellomodule.c*/
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Module Author");
MODULE_DESCRIPTION("Module Description");

static int __init hello_init(void)
{
printk(KERN_ALERT "HelloModule is installed.\n");
return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_ALERT "HelloModule is removed.\n");
}

module_init(hello_init);
module_exit(hello_exit);


解释:

模块需要至少需要两个函数module_init()和module_exit()。其中第一个是在安装模块时被调用,所有的初始化工作可以再其中完成。第二个函数是在卸载模块时调用,可以在其中做一些清理工作。

代码中printk()是输出显示数据的系统调用,其工作在内核空间中。

编译:

内核代码写好后,需要编译成可加载模块,需要在当前目录下创建一个Makefile文件,内容如下:

obj-m += hellomodule.o
CUR_PATH := $(shell pwd)
KERN_PATH := /usr/src/linux-headers-$(shell uname -r)
all:
make -C ${KERN_PATH} M=${CUR_PATH} modules
clean:
make -C ${KERN_PATH} M=${CUR_PATH} clean
然后输入make指令进行编译,编译完成后即得到可加载模块hellomodule.ko

加载:

输入命令

insmod hellomodule.ko

即可将模块安装到内核中,其调用初始化函数时有一条打印语句,并不显示在屏幕上,需要输入 dmesg 命令才能看见。或者使用 lsmod 命令可以查看已加载的模块

卸载:

输入命令

rmmod hellomodule

即可卸载该模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: