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

Tim*_*eld 0 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
}
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)

任何帮助将不胜感激!

Adr*_*iuk 5

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

our_timer一个static变量或使用kmalloc.