kernel中的completion

一个实例:
ko insmod 的时候,创建 completion , 然后进行 driver probe/add,init进程使用 wait_for_completion_timeout 等待固定时间,看 driver 是否probe ok,driver probe 成功之后,使用 complete() 通知给等待它的进程

#include <linux/init.h>
#include <linux/module.h>
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/printk.h>

static struct completion finish_event;

static int demo_add(struct xxx_device *device)
{
	// 这里干一些事
	// ... ...

	complete(&finish_event);
	return 0;
}


static struct xxx_driver xxx_driver = {
	.name = "xxxx",
	.ops = {
		.add = demo_add,
		.remove = demo_remove,
	},
};

static int __init xxx_init(void)
{
	int ret, t;
	init_completion(&finish_event);

	ret = xxx_bus_register_driver(&xxx_driver);
	if (ret)
		return ret;

	t = wait_for_completion_timeout(&finish_event, 5*HZ);
	if (t == 0) {
		ret = -ETIMEDOUT;
		goto cleanup;
	}
}

具体原理,后面补上

猜你喜欢

转载自blog.csdn.net/wangkai6666/article/details/121326379