我正在编写一个使用动态计时器的内核(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
}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作约2秒,直到计时器到期.然后系统崩溃了.我也尝试过这样的结果:
struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0);
mod_timer(&our_timer, jiffies + 2000);
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
our_timer在堆栈上分配,并传递指向它的指针.最有可能our_timer超出范围,被覆盖,2秒后该值our_timer.function无效.
做our_timer一个static变量或使用kmalloc.