3

Event-Workqueue をプログラミングしようとしましたが、いくつか問題が発生しました。

Linux 2.6.36 カーネルを使用しています。また、DECLARE_WORK 関数は 3 つのパラメーターから 2 つのパラメーターに変更されました。

問題は、古い宣言は

 DECLARE_WORK  (struct work_struct name,  void (*func)(void *),  void *data); 

そして新しいのは

 DECLARE_WORK  (struct work_struct name,  void (*func)(void *)); 

void *data ポインターは func パラメーターを与えるためのものだったと思います。そうですか?新しいバージョンの DECLARE_WORK でそれを行うにはどうすればよいですか?

助けてくれてありがとう

ピーター

4

1 に答える 1

6

DECLARE_WORK主に、インスタンス データを必要としない静的作業項目用です。あなたがしたいINIT_WORKwork_structこれを使用して、(選択した) 別の構造体のメンバーであるを初期化container_ofし、コールバックで使用して、含まれている構造体へのポインターを取得します。このcontainer_ofパターンは Linux カーネルでは非常に一般的であるため、慣れておくことをお勧めします。

この例は、初期化ポイントコールバックwl1271_netstack_workを見てください。

于 2012-08-28T07:22:35.597 に答える