1、分配对象
struct timer_list {
struct hlist_node entry; // 内核链表
unsigned long expires; // 定时器超时时间,单位是节拍数
void (*function)(unsigned long); // 定时器处理函数
unsigned long data; // 向定时器函数传递的参数
}
其中expires的单位是节拍数,节拍数等于 1 / HZ,而HZ是内核中定义好的,比如说内核中定义的HZ为100, jiffies(jiffies记录了系统启动后的滴答数)就会增加100。
2、初始化定时器
//初始化定时器
void timer_setup(struct timer_list *timer, void (*func)(struct timer_list *),
unsigned int flags)
//修改或者再次启动定时器
int mod_timer(struct timer_list *timer, unsigned long expires)
3、启动定时器
//启动定时
void add_timer(struct timer_list *timer)
//再次启动定时器
int mod_timer(struct timer_list *timer, unsigned long expires)
4、删除定时器
//删除定时器
int del_timer(struct timer_list *timer)
5、总体驱动代码
struct timer_list mytimer;
void timer_function(unsigned long data)
{
mod_timer(&mytimer,jiffies+HZ);
}
static int __init mycdev_init(void)
{
mytimer.expires = jiffies+HZ; //加HZ就可以在任何系统上都是1s的定时
timer_setup(&mytimer,timer_function,0);
add_timer(&mytimer);
}
static void __exit mycdev_exit(void)
{
del_timer(&mytimer);
}