0

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

任何帮助将不胜感激!

4

1 回答 1

5

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

创建our_timer一个static变量或使用kmalloc.

于 2009-07-16T19:51:07.807 回答