内核版本:v4.14
在Linux内核驱动开发过程中,定时器是我们经常用到的一个东西,我们可以使用定时器延时执行一个任务或者轮询执行某一任务。
相关结构体:
struct timer_list {
struct hlist_node entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
u32 flags;
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
常用函数:
void init_timer(struct timer_list * timer); //初始化定时器 void add_timer(struct timer_list * timer);//添加定时器到链表 int mod_timer(struct timer_list *timer, unsigned long expires);//修改定时器的expires int del_timer(struct timer_list * timer); //从链表中删除定时器
一般使用方法:
1、定义定时器
struct timer_list timer;
2、初始化定时器
init_timer(&timer);
3、设置定时器参数
timer.expires = jiffies + 延时;
timer.function = timer_handle; //定时回调函数
timer.data = 0; //回调函数参数
4、添加定时器到链表(开始计时)
add_timer(&timer);
6、实现定时回调函数
static void timer_handle( unsigned long arg)
{
... ...
//再次启动定时器
方法1:
timer.expires = jiffies + 延时;//再次启动定时器
add_timer(&timer);
方法2:
mod_timer(&timer, jiffies + 延时);
... ...
}
7、删除定时器
del_timer(&timer);



