内核版本3.13.8;
实验平台:虚拟机 unbuntu14.04
1、编辑文件“mymod.c”
#include
#include
#include
static int sec =5;
module_param (sec,int, S_IRUGO|S_IWUSR );
MODULE_PARM_DESC(SEC,"Set the intervel.");
static void mymod_timer(unsigned long data);
static DEFINE_TIMER(timer,mymod_timer,0,0);
static void mymod_timer(unsigned long data)
{
printk (KERN_INFO"mymod: timer\n");
mod_timer(&timer,jiffies + sec *HZ);
}
static int mymod_init(void)
{
printk (KERN_INFO"mymod: init\n");
if(sec<=0)
{
printk (KERN_INFO"Invalid intercal sec=%d\n",sec);
return -EINVAL;
}
mod_timer(&timer,jiffies+sec*HZ);
return 0;
}
static void mymod_exit(void)
{
del_timer(&timer);
printk(KERN_INFO"mymod: exit\n");
}
module_init(mymod_init);
module_exit(mymod_exit);
MODULE_AUTHOR("Juanjuan");
2 编辑Makefile文件:
obj-m := mymod.o
CURRENT_PATH := $(shell pwd)
VERSION_NUM :=$(shell uname -r)
LINUX_PATH :=/usr/src/linux-3.13.8
all :
make -C $(LINUX_PATH)M=$(CURRENT_PATH) modules
clean :
make -C $(LINUX_PATH)M=$(CURRENT_PATH) clean
注意格式,截图说明,两个红色make之前一定要是tab键打的空格。
3、执行make命令,生成模块mymod.ko
4、通过modinfo命令,可以看到mymod.ko的信息,在这里可以看到使用MODULE_*宏所指定的内容。
5、添加内核模块
#insmod mymod.ko
使用dmesg命令,可以看到mymod.ko的输出内容
#dmesg | tail
使用lsmod可以显示目前调价到内核中的模块列表
要将已经添加的模块从内核空间删除时,可以使用rmmod命令
#rmmod mymod
执行rmmod命令后,内核将从内核空间内删除,使用lsmod命令就不会再输出mymod行,此外,使用dmesg命令还可以看到终止模块的处理中printk()输出的信息mymod:exit。
6 模块参数介绍
三个操作分别是查看生成的对应的目录和文件、确认在parameters下生成的模块mymod中所定义的参数sec、其内容的初始值是5。另外,参数5可以在使用insmod添加模块时对其值进行指定,命令 # insmodmymod.ko sec=10,这样,默认间隔5秒变为间隔10秒。
小白前几天第一次写博客,图片竟然没有插进去,晕死,现在刚刚补上,很多不足的地方,大家多多指教啊,也欢迎大家加群478938039一起讨论研究,网上资源很多,良莠不齐,适合自己的才是最好的。