/*
* 每隔一段时间打印字符
* 这是一个定时器使用实验的,简单实用time_list去初始化一个动态定时器
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kobject.h>
#include <linux/device.h>
#include <linux/timer.h>
struct timer_list my_timer;
static void timer_func(unsigned long func_parameter)
{
init_timer(&my_timer);
/* HZ代表1秒,定时器的时间控制就是设置这个expire的值
* 这里的5*HZ地标这里是定时5秒;
*/
my_timer.expires = jiffies + 5*HZ;
my_timer.function = timer_func;
my_timer.data = func_parameter;
add_timer(&my_timer);
printk("time out \n");
}
static int mytime_init(void)
{
printk("hello , this is a timer\n");
init_timer(&my_timer);
my_timer.expire = jiffies + 5*HZ;
my_timer.function = timer_func;
my_timer.data = func_parameter;
add_timer(&my_timer);
return 0;
}
static void mytime_exit(void)
{
printk("bybe \n");
del_timer(&my_timer);
}
module_init(mytime_init);
module_exit(mytime_exit);
MODULE_AUTHOR("xxx");
MODULE_LICENSE("GPL"); /* 必须用大写 */
这段代码的功能就是在ubuntu里边定时的打印一段东西。
static int mytime_init(void)
{
printk("hello , this is a timer\n");
init_timer(&my_timer);
my_timer.expire = jiffies + 5*HZ;
my_timer.function = timer_func;
my_timer.data = func_parameter;
add_timer(&my_timer);
return 0;
}
这一段是定时器的初始化函数:
1.有一个结构体吧,代表定时器,是啥?就是time_list,那么一开始就要声明一个这个结构体吧
2.结构体里边的内容,需要填充吧---首先init_timer()初始化定时器,然后是:
my_timer.expire = jiffies + 5*HZ; //定时多久
my_timer.function = timer_func; //时间到了,应该执行的函数体
my_timer.data = func_parameter; //传给上边函数的参数
add_timer(&my_timer); //添加定时器到内核,或者说是注册定时器
先说一下吧,jiffies代表的是时间,HZ的大小是1s内jiffies增加的数,在这里可以理解为5s后,执行timer_func函数。
3.timer_func函数
static void timer_func(unsigned long func_parameter)
{
init_timer(&my_timer);
/* HZ代表1秒,定时器的时间控制就是设置这个expire的值
* 这里的5*HZ地标这里是定时5秒;
*/
my_timer.expires = jiffies + 5*HZ;
my_timer.function = timer_func;
my_timer.data = func_parameter;
add_timer(&my_timer);
printk("time out \n");
}
我们需要在timer_func里边再次设置expires,function,data,然后就是我们其他的动作。