使用linux内核中的workQueue传递/共享数据

时间:2014-09-28 10:06:16

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

任何人都可以帮助我理解"传递数据(共享或私人)" workQueue?

1:声明回调/工作处理程序

static void sample_work_fn(struct work_struct *Wq)
{
...........
...........
}

2:填写work_struct结构(静态)

static DECLARE_WORK(sample_work, sample_work_fn);

3:安排工作队列

static void samp_sysrq(int arg)
{
        schedule_work(sample_work);
}

如果我需要使用我的工作队列传递/共享数据,这怎么可能?

1 个答案:

答案 0 :(得分:3)

谢谢本杰明,

我在" Linux transfer parameter for function in DECLARE_WORK"中找到了相关信息。真的很直白,这真的让我理解。这个链接说

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