struct timer_list {
struct list_head entry; //将多个定时器连城链表
unsigned long expires; //超时时间,用节拍表示,此值小于或等于jiffies的时候说明定时器到期或终止
void (*function)(unsigned long);//超时后执行的函数
unsigned long data //传递个函数的参数
struct tvec_base *base; //用来指定执行的CPU
#ifdef CONFIG_TIMER_STATS //此配置用来采集定时器通用基本信息
void *start_site; //通过gcc支持的__builtin_return_address(0)来设置成当前函数返回地址
char start_comm[16]; //设置成进程的task->comm
int start_pid; //设置成进程的pid
#endif
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map; //映射lock实例到lock-class对象,用于调试模块死锁检测
#endif
};
init_timer(timer)
功能:这是一个宏用来动态地定义一个定时器
timer:struct timer_list结构指针
头文件:#include <linux/timer.h>
init_timer_deferrable(timer)
功能:这是一个宏用来动态地定义一个定时器,此处定义的timer可以被短暂的延时,减少cpu唤醒的次数
timer:struct timer_list结构指针
头文件:#include <linux/timer.h>
void add_timer(struct timer_list *timer)
功能:把一个定时器对象加入到内核的管理队列,内部调用mod_timer
timer:定时器对象
头文件:#include <linux/timer.h>
int mod_timer(struct timer_list *timer, unsigned long expires)
功能:若定时器存在队列中则修改定时器超时时间,否则添加一个定时器到对列中
timer:定时器对象
expires:新的超时时间
返回值:若定时器在内核对列上,则修改超时后返回1
若定时器不在内核对列上,则将定时器添加到队列中后返回0
头文件:#include <linux/timer.h>
int del_timer(struct timer_list *timer)
功能:在内核队列中删除一个定时器, 定时器到期后,内核会自动将定时器从内核队列中删除,但若想在
定时器未超时之前删除一个定时器,那么就可以调用此函数
timer:定时器对象
返回值: 若删除定时器时,此定时器以超时,并不在内核对列中则返回0
若定时器未超时,则将定时器从内核对列删除后返回1
头文件:#include <linux/timer.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/timer.h>
struct timer_list timer;
//定时器超时函数
void func(unsigned long data)
{
printk("**************************timer is execute\n");
printk("***modtimer=%d\n",mod_timer(&timer,jiffies+2000));
return;
}
static int __init yld_init(void){
//初始化定时器对象
init_timer(&timer);
timer.expires = jiffies+9000;
timer.function = func;
timer.data = 0;
//添加定时器
add_timer(&timer);
//修改定时器超时时间
printk("**init *modtimer=%d\n",mod_timer(&timer,jiffies+5000));
return 0;
}
static void __exit yld_exit(void)
{
printk("*******************%d\n",del_timer(&timer));
return;
}