用于DECLARE_WORK中功能的Linux传输参数
作者:互联网
我尝试对事件工作队列进行编程,但是遇到一些问题.
我使用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?
谢谢您的帮助
彼得
解决方法:
DECLARE_WORK主要用于不需要实例数据的静态工作项.您需要INIT_WORK.使用它来初始化是另一个结构(您选择的结构)的成员的work_struct,然后在回调中使用container_of获取指向包含结构的指针.这个container_of模式在Linux内核中非常常见,因此熟悉它是一个好主意!
您可以使用wl1271_netstack_work看到一个示例-查看initialization point和the callback.
标签:embedded-linux,linux-kernel,linux-device-driver,linux 来源: https://codeday.me/bug/20191031/1979670.html