linux ubuntu编写内核模块并添加

内核版本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键打的空格。

linux ubuntu编写内核模块并添加_第1张图片

3、执行make命令,生成模块mymod.ko

 linux ubuntu编写内核模块并添加_第2张图片

4、通过modinfo命令,可以看到mymod.ko的信息,在这里可以看到使用MODULE_*宏所指定的内容。

linux ubuntu编写内核模块并添加_第3张图片

5、添加内核模块

         #insmod mymod.ko

         使用dmesg命令,可以看到mymod.ko的输出内容

         #dmesg | tail

linux ubuntu编写内核模块并添加_第4张图片

使用lsmod可以显示目前调价到内核中的模块列表

linux ubuntu编写内核模块并添加_第5张图片

要将已经添加的模块从内核空间删除时,可以使用rmmod命令

#rmmod mymod

执行rmmod命令后,内核将从内核空间内删除,使用lsmod命令就不会再输出mymod行,此外,使用dmesg命令还可以看到终止模块的处理中printk()输出的信息mymod:exit。

6 模块参数介绍

linux ubuntu编写内核模块并添加_第6张图片

三个操作分别是查看生成的对应的目录和文件、确认在parameters下生成的模块mymod中所定义的参数sec、其内容的初始值是5。另外,参数5可以在使用insmod添加模块时对其值进行指定,命令 # insmodmymod.ko sec=10,这样,默认间隔5秒变为间隔10秒。

小白前几天第一次写博客,图片竟然没有插进去,晕死,现在刚刚补上,很多不足的地方,大家多多指教啊,也欢迎大家加群478938039一起讨论研究,网上资源很多,良莠不齐,适合自己的才是最好的。


小白前几天第一次写博客,图片竟然没有插进去,晕死,现在刚刚补上,很多不足的地方,大家多多指教啊,也欢迎大家加群 478938039一起讨论研究,网上资源很多,良莠不齐,适合自己的才是最好的。

你可能感兴趣的:(linux)