タイマー

時間がきたらタイムアウトするような用途で使います。

サンプル

mod_timer() に指定する tick はシステムが起動してからのtickを指定するので、jiffies+タイムアウトさせたい時間になります。 exit 処理で del_timer() しないとタイマーが削除されないので注意。

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/timer.h>
#include <linux/jiffies.h>

static void mykmod_timer_handler(unsigned long data);
static unsigned long onesec;

DEFINE_TIMER(mytimer, mykmod_timer_handler, 0, 0);

static void
mykmod_timer_handler(unsigned long data)
{
        unsigned long j = jiffies;
        pr_info("mykmod timer %u jiffies\n", (unsigned)j);

        mod_timer(&mytimer, jiffies + onesec);
}

static int __devinit mykmod_init(void)
{
        unsigned long j = jiffies;

        onesec = msecs_to_jiffies(1000 * 1);

        pr_info("mykmod loaded %u/%u jiffies before\n", (unsigned)j, (unsigned)onesec);

        mod_timer(&mytimer, jiffies + onesec);

        pr_info("mykmod loaded %u jiffies after \n", (unsigned)j);

        return 0;
}

static void __devexit mykmod_exit(void)
{
        del_timer(&mytimer);
        pr_info("mykmod exit\n");
}

module_init(mykmod_init);
module_exit(mykmod_exit);

MODULE_DESCRIPTION("mykmod");
MODULE_LICENSE("GPL");

実行結果

Feb 21 12:07:58 xubuntu kernel: [  213.317955] mykmod loaded 4294945625/250 jiffies before
Feb 21 12:07:58 xubuntu kernel: [  213.318093] mykmod loaded 4294945625 jiffies after
Feb 21 12:07:59 xubuntu kernel: [  214.316455] mykmod timer 4294945875 jiffies
Feb 21 12:08:00 xubuntu kernel: [  215.316482] mykmod timer 4294946125 jiffies
Feb 21 12:08:01 xubuntu kernel: [  216.316145] mykmod timer 4294946375 jiffies
Feb 21 12:08:02 xubuntu kernel: [  217.316232] mykmod timer 4294946625 jiffies
Feb 21 12:08:03 xubuntu kernel: [  218.316371] mykmod timer 4294946875 jiffies
Feb 21 12:08:04 xubuntu kernel: [  219.316506] mykmod timer 4294947125 jiffies
Feb 21 12:08:05 xubuntu kernel: [  220.316086] mykmod timer 4294947375 jiffies
Feb 21 12:08:05 xubuntu kernel: [  220.538413] mykmod exit

Share this post:
Child pages:

Comments