timer常用接口:
- 1、初始化timer:
void init_timer_key()
{
debug_init();
do_init_timer(); //这里初始化了一些通用性参数,也初始化了链表节点
} - 2、初始化完成后,需要使用add_timer函数将初始化的参数加到定时器链表中去
注意:内核定时器是一个单次的定时器
void add_timer()
{
BUG_ON(timer_pending(timer)); //检查该timer有没有被挂起
mod_timer(timer, timer->expires); //,没有被挂起,则修改定时器到期时间
}
mod_timer函数还是调用mod_timer函数来加入定时器链表中的 - 3、删除定时器:
del_timer - 4、简单实例:
#include <linux/time.h>
/* 定义一个定时器指针*/
static struct timer_list *timer;
/参数是timer中的变量data /
void func_handle(unsigned long data)
{
//做想做的事情
/因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时 /
/kernel timer restatr /
mod_timer(timer, jiffies + HZ/50)
}
int xx_init(void)
{
timer = kzalloc(sizeof(struct timer_list), GFP_KERNEL)
...
init_timer(timer); //初始化定时器
timert->function = func_handle; //绑定定时时间到后的执行函数
timer->expites = jiffres + (HZ/50); //定时的时间点,当前时间的20ms之后
add_timer(timer); //添加并启动定时器
}
void xxx_exit(void)
{
...
del_timer(timer);
}
module_init(xxx_init);
module_exit(xxx_exit);
MODULE_LICENSE("GPL");