DECLARE_WORK 中函数的 Linux 传输参数

Pet*_*ter 3 linux linux-device-driver linux-kernel embedded-linux

我尝试编写一个事件工作队列,但我遇到了一些问题。

我使用的是 Linux 2.6.36 内核。并且 DECLARE_WORK 函数从 3 个参数更改为 2 个。

问题是,旧的声明是

 DECLARE_WORK  (struct work_struct name,  void (*func)(void *),  void *data); 
Run Code Online (Sandbox Code Playgroud)

而新的是

 DECLARE_WORK  (struct work_struct name,  void (*func)(void *)); 
Run Code Online (Sandbox Code Playgroud)

我认为 void *data 指针是给 func 参数。那正确吗?我如何使用新版本的 DECLARE_WORK 做到这一点?

谢谢您的帮助

彼得

bdo*_*lan 5

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

你可以看到我们用一个例子wl1271_netstack_work-看一看的初始化点回调