用于DECLARE_WORK中的函数的Linux传输参数

时间:2012-08-28 06:24:42

标签: linux linux-kernel linux-device-driver embedded-linux

我尝试编写一个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 *数据指针是给出func参数。是对的吗? 我怎样才能使用DECLARE_WORK的新版本?

感谢您的帮助

彼得

1 个答案:

答案 0 :(得分:4)

DECLARE_WORK主要用于静态工作项,不需要实例数据。你想要INIT_WORK。使用它来初始化work_struct,它是另一个结构(您选择的)的成员,然后在回调中使用container_of来获取指向包含结构的指针。这个container_of模式在Linux内核中非常常见,所以熟悉它是个好主意!

您可以使用wl1271_netstack_work查看此示例 - 查看initialization pointthe callback