我正在编写一个使用动态计时器的内核(2.6.28)模块。我正在使用timer_list结构,如下所示:
struct timer_list our_timer;
init_timer(&our_timer);
our_timer.function = handleFlowTimer;
our_timer.expires = jiffies + 2000;
our_timer.data = 0;
add_timer(&our_timer);
void handleFlowTimer(unsigned long data)
{
//do nothing
}
这可以正常工作约2秒,直到计时器到期。然后系统崩溃了。我也尝试过这样的结果:
struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0);
mod_timer(&our_timer, jiffies + 2000);
非常感谢任何帮助!
答案 0 :(得分:5)
our_timer
在堆栈上分配,并传递指针。最有可能our_timer
超出范围,被覆盖,2秒后值our_timer.function
无效。
将our_timer
变为static
变量或使用kmalloc
。