现在的位置: 首页 > 操作系统 > 正文

linux内核:定时器

2018年10月06日 操作系统 ⁄ 共 1346字 ⁄ 字号 评论关闭

一、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

抱歉!评论已关闭.