タイマー
時間がきたらタイムアウトするような用途で使います。
サンプル
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