FreeBSD内核模块中的定时器?

时间:2015-01-28 08:34:00

标签: timer kernel freebsd kernel-module callout

我想让我的内核模块定期在FreeBSD内核中做一些事情(一定的时间间隔,比如10秒)。这样做的任何例子?

我搜索并发现有一些函数,如callout / timeout(old),但它们看起来很复杂,我找不到好的例子。对于callout'', it seems that callout_reset''类似于我想要的函数(参数包括处理程序和时间间隔)。但它似乎只执行一次。所以我很困惑。

示例是最好的,即使是函数``timeout''。

1 个答案:

答案 0 :(得分:3)

您需要使用callout(9)。至于示例......嗯,对于现实世界的代码,您可以看一下:http://svnweb.freebsd.org/base/head/sys/dev/iscsi/iscsi.c?revision=275925&view=markup;搜索is_callout。基本上,你需要'struct timeout',这个函数会定期调用,然后你需要让计时器滴答作响:

struct callout callout;

static void
callout_handler(void *whatever)
{
        // do your stuff, and make sure to get called again after 'seconds'.
        callout_schedule(&callout, seconds * hz);
}

static void
start_ticking(void)
{
        callout_init(&callout, 1);
        callout_reset(&callout, seconds * hz, callout_handler, whatever);
}