一、函数定义
Linux 内核中使用 timer_list 结构体表示内核定时器:
struct timer_list {
struct hlist_node entry;
unsigned long expires; /* 定时器超时时间,单位是节拍数 */
void (*function)(struct timer_list *); /* 定时处理函数 */
u32 flags;
.......
};
定义和初始化:
DEFINE_TIMER(timer,function_name); //定义一个定时器
向 Linux 内核注册定时器,使用 add_timer 函数 向内核注册定时器以后,定时器就会开始运行
void add_timer(struct timer_list *timer)
删除一个定时器
int del_timer(struct timer_list * timer)
修改定时值,如果定时器还没有激活的话,mod_timer 函数会激活定时器
int mod_timer(struct timer_list *timer,unsigned long expires)
可以使用以下命令进行 3 秒钟的定时:
timer_test.expires = jiffies_64 +msecs_to_jiffies(3000) // 定时时间 = 当前时间 + 延时时间(3秒)
二、实例代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>
static void function_test(struct timer_list *t); //定义 function_test 定时功能函数
DEFINE_TIMER(timer_test,function_test); //定义一个定时器
static void function_test(struct timer_list *t)
{
printk("this is function test \n");
mod_timer(&timer_test,jiffies_64 + msecs_to_jiffies(5000));//使用 mod_timer 函数将定时时间设置为五秒后
}
static int __init timer_mod_init(void) //驱动入口函数
{
timer_test.expires = jiffies_64 + msecs_to_jiffies(5000);//将定时时间设置为五秒后
add_timer(&timer_test); //添加一个定时器
return 0;
}
static void __exit timer_mod_exit(void) //驱动出口函数
{
del_timer(&timer_test); //删除一个定时器
printk("module exit \n");
}
module_init(timer_mod_init);
module_exit(timer_mod_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("topeet");