3

我尝试对事件工作队列进行编程,但遇到了一些问题。

我使用 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_WORK。使用它来初始化作为work_struct另一个结构(您选择)的成员的 a,然后container_of在回调中使用以获取指向包含结构的指针。这种container_of模式在 Linux 内核中非常常见,因此最好熟悉它!

wl1271_netstack_work您可以通过查看初始化点回调来查看一个示例。

于 2012-08-28T07:22:35.597 回答