在Linux内核模块中使用timer_list会导致系统崩溃

时间:2009-07-16 19:38:28

标签: c linux-kernel

我正在编写一个使用动态计时器的内核(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);

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

our_timer在堆栈上分配,并传递指针。最有可能our_timer超出范围,被覆盖,2秒后值our_timer.function无效。

our_timer变为static变量或使用kmalloc