一个实例:
ko insmod 的时候,创建 completion , 然后进行 driver probe/add,init进程使用 wait_for_completion_timeout 等待固定时间,看 driver 是否probe ok,driver probe 成功之后,使用 complete() 通知给等待它的进程
#include#include #include #include #include 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; } }
具体原理,后面补上
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)