jiffies记录了自linux启动后时钟中断发生的次数(每当时钟中断发生后,全局变量jiffies就加1),驱动程序常用jiffies来计算不同事件间的时间间隔。
应用1:延迟执行
unsigned long j=jiffies+jit_delay*HZ; while(jiffies < j) { do something;//逻辑处理 }应用2:内核定时器 内核定时器用于控制某个函数(定时器处理函数)在未来的某个特定时间执行。内核定时器注册的处理函数只执行一次,不是循环执行的。
内核定时器的操作函数
#include <linux/device.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/timer.h> #include <asm/uaccess.h> #include <linux/jiffies.h> MODULE_LICENSE("GPL"); struct timer_list timer; void timer_function(int para) { printk("<0>Timer Expired and para is %d !!!\n",para); } static int __init timer_init(void) { init_timer(&timer); timer.data = 5; timer.expires = jiffies + (20 * HZ); timer.function = timer_function; add_timer(&timer); return 0; } static void __exit timer_exit(void) { del_timer(&timer); }