一、Linux内核定时器
1.1 代码
#include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> #include <linux/kernel.h> #include <linux/inetdevice.h> #include <linux/string.h> #include <linux/inet.h> #include <linux/ip.h> #include <linux/tcp.h> #include <linux/udp.h> #include <net/checksum.h> #include <net/ip.h> #include <linux/tcp.h> #include <net/udp.h> #include <linux/time.h> #include <linux/timer.h> MODULE_LICENSE("GPL"); struct timer_list g_timer; void timer_handler(unsigned long data) { struct timespec ts; ts = current_kernel_time(); printk(KERN_DEBUG"time_handler time: %ld", ts.tv_sec); printk(KERN_DEBUG"data:%ld", data); g_timer.expires = jiffies + 5*HZ; add_timer(&g_timer); //mod_timer(&g_timer, jiffies + 5*HZ); } static int init_marker(void) { struct timespec ts; ts = current_kernel_time(); printk(KERN_DEBUG"setup_timer time:%ld", ts.tv_sec); setup_timer(&g_timer, timer_handler, 8); g_timer.expires = jiffies + 10*HZ; add_timer(&g_timer); return 0; } static void exit_marker(void) { del_timer(&g_timer); } module_init(init_marker); module_exit(exit_marker);
1.2 代码说明
setup_timer() 初始化定时器,设置定时器回调函数,参数。
add_timer()添加定时器到系统。 回调函数只调用一次。
add_timer()修改定时器参数,让定时器继续执行。
del_timer()删除定时器。
上面函数代码意义:启动10秒后执行回调函数,之后每隔5秒再执行一次回调函数。
1.3 执行结果
参考资料:
定时器:http://blog.sina.com.cn/s/blog_6abf2c040101a9ky.html
linux内核中的计时器:http://blog.sina.com.cn/s/blog_69ed493701017b2o.html
jiffies与HZ:http://blog.chinaunix.net/uid-10221131-id-355087.html