您的位置:首页 > 运维架构 > Linux

linux kernel中timer的使用

2016-07-03 20:01 381 查看

linux kernel中timer的使用 http://blog.csdn.net/njuitjf/article/details/16888821

在kernel中如果想周期性的干些什么事情,或者某个特定时间干些什么事情,可以使用timer。

例如像周期性地dump某段buffer的数据等等。

先来看看使用方法。

先定义一个struct timer_list的对象。eg: struct timer_list dump_t;

这个对象相当于一个闹钟,其中包含了时间点,也就是什么时候激活闹钟;一个函数指针,闹钟激活后干活的地方;还有一个void 指针,在闹钟干活的时候可能需要传给它一些当前的数据。


先看使用方法,之后再稍微深入了解一下。

前面定义好了struct timer_list对象,接下来就需要初始化该对象。

调用函数init_timer进行初步初始化。

然后对结构体中的一些成员进行赋值:

init_timer(&dump_t); // 1. 初始化

dump_t.function = dump_function; // 2. 绑定到时候要调的函数([b]timer任务具体的事务)[/b]

dump_t.data = (unsigned long) my_dev;

dump_t.expires = jiffies + 2*HZ; // 3. 设置timer任务激活时间,2秒钟之后timer被激活,如果是n秒,将2*HZ改为n*HZ。

这样就OK了么?

当然没有,需要把timer加到timer list中,也就是要告诉系统,你申请了这么一个timer。

add_timer(&dump_t); // 4. 告诉系统,你申请了这么一个timer。

现在不明白的地方就是timer到了,干活的地方,即dump_function函数。

函数声明:

static void dump_function(unsigned long channel);

其中的实现么,就随意了,看你想让这个timer干些什么活。

注意一点,这个timer只会响应一次,因为jiffies + HZ时间点只有一个。

如果想让此timer周期性地干活,就需要在dump_function函数中重新启动该timer。

启动方法:

dump_function ()


{

  do_your_task();

  del_timer(&dump_t);

  dump_t.function = dump_function;

  dump_t.data = (unsigned long) mydev;

   dump_t.expires = jiffies + 2*HZ;

  add_timer(&dump_t);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: