我正在为Linux编写一个内核模块,并且希望自己的计时器重新设置。为此,我想mod_timer
从计时器的回调函数内部进行调用,如下所示:
static void sched_send(unsigned long data)
{
send_now();
mod_timer(&test_timer, jiffies+(get_interval()*HZ));
}
static void timer_start(void)
{
set_log_msg("Meep meep!");
test_timer.function = sched_send;
test_timer.expires = jiffies + HZ*get_interval();
}
但是,我读过mod_timer
删除计时器,然后重新添加它。会引起问题吗?如果是这样,是否有更好的方法为内核模块创建重复计时器?
你的函数timer_start()
必须调用add_timer()
它设置功能和到期时间之后。计时器功能触发后,您的计时器将不再处于活动状态,因此您要做的就是将.expires
字段重置为新值并add_timer()
再次调用。确保您提供了一种干净的方法来停止重新计划计时器,例如在模块卸载时。
send_now();
if(!terminate_timer) {
test_timer.expires = jiffies + HZ*get_interval();
add_timer(&test_timer);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句