在内核中,当需要定时实现某个功能时,可以使用timer来实现该功能。
timer是一种softirq,所以对timer handler的要求与softirq一样。
timer_list的定义如下:
structtimer_list {
struct list_head entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
struct tvec_base *base;
};
API
(1) timer定义并初始化
#define DEFINE_TIMER(_name, _function, _expires, _data)
其中name为timer变量的名称,function为timer 回调函数,expires为超时时间,data为参数
(2) 初始化已经定义的timer
#define init_timer(timer)\
init_timer_key((timer), NULL, NULL)
#define init_timer_deferrable(timer)\
init_timer_deferrable_key((timer), NULL,NULL)
#define init_timer_on_stack(timer)\
init_timer_on_stack_key((timer), NULL, NULL)
#define setup_timer(timer, fn, data)\
setup_timer_key((timer), NULL, NULL, (fn),(data))
#define setup_timer_on_stack(timer, fn, data)\
setup_timer_on_stack_key((timer), NULL, NULL,(fn), (data))
(3) add_timer/ add_timer_on
将timer增加到系统中。
voidadd_timer_on(struct timer_list *timer, int cpu)
voidadd_timer(struct timer_list *timer)
(3) 删除timer
intdel_timer_sync(struct timer_list *timer)
intdel_timer(struct timer_list *timer)
(4)修改timer
intmod_timer(struct timer_list *timer, unsigned long expires)
该函数用来修改timer的超时时间。