我尝试编写一个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的新版本?
感谢您的帮助
彼得
答案 0 :(得分:4)
DECLARE_WORK
主要用于静态工作项,不需要实例数据。你想要INIT_WORK
。使用它来初始化work_struct
,它是另一个结构(您选择的)的成员,然后在回调中使用container_of
来获取指向包含结构的指针。这个container_of
模式在Linux内核中非常常见,所以熟悉它是个好主意!
您可以使用wl1271_netstack_work
查看此示例 - 查看initialization point和the callback。