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 に答える