init_work是一种工作队列,用于在内核中延迟执行某些任务,这些任务通常是一些需要在中断上下文之外执行的临时性任务。在Linux内核中,init_work被广泛应用于各个子系统中,用于异步执行一些初始化工作。 在Linux内核中,init_work的创建和初始化通常在子系统的初始化函数中完成。一旦init_work被创建和初始化成功,就会被插入...
init_work主要负责的工作包括设置系统环境变量、加载驱动程序、初始化硬件设备、挂载文件系统等。在Linux系统启动的过程中,init_work会在不同的阶段被调用,以确保系统正常运行。在init_work的帮助下,系统在启动后可以正常运行并提供各种服务。 init_work的具体实现是通过调用内核函数init_work,这个函数会创建一个工作队列...
1.INIT_WORK(struct work_struct *work, void (*function)(void *), void *data) 上面一句只是定义了work和work对应的操作。 要是在实际使用的时候还是需要你去在适当的条件下激活这个work。只有激活了这个work, 这个work才有运行的机会。这个激活操作接口是shudule_work或是queue_work。 这两个接口之后只是说...
1. 其中参数1是个work_struct结构体,参数2是个函数名,通过INIT_WORK将work_struct与一个函数建立起来. 其中work_struct结构体定义如下所示: 2. 通知内核线程,在后续的时间里,系统将会自动调用work结构体对应的func函数 3. 取消work结构体对应的func函数,一般在exit中使用 接下来,在下一章,将会在中断里用到它们...
INIT_WORK(&ts->work, goodix_ts_work_func);//struct work_struct work,ts是client私有数据结构...
void__init_work( struct work_struct *work , int onstack ) { if (onstack) debug_object_init_on_stack( work, &work_debug_descr ); else debug_object_init( work , &work_debug_descr ); //go in } 5: voiddebug_object_init(void *addr, struct debug_obj_descr *descr) ...
上面的例子使用了中断,进行了work wakeup的操作。不使用中断也是可以的。 例子2:qcom log dump reg 的操作 注册init workqueue:kernel/msm-4.9/drivers/gpu/drm/msm/sde_dbg.c--->sde_dbg_init--->INIT_WORK(&sde_dbg_base.dump_work,_sde_dump_work);--->_sde_dump_work--->_sde_dump_array ...
INIT_WORK(structwork_struct *work, work_func_t func);INIT_DELAYED_WORK(structdelayed_work *work, work_func_t func);
define INIT_WORK(_work, _func)\ do {\ __INIT_WORK((_work), (_func), 0);\ } while (0)define DECLARE_WORK(n, f)\ struct work_struct n = __WORK_INITIALIZER(n, f)这种问题以后自己打开内核文件看下就好了。workqueue.h ...
INIT_WORK(work,func); 其中参数1是个work_struct结构体,参数2是个函数名,通过INIT_WORK将work_struct与一个函数建立起来. 其中work_struct结构体定义如下所示: 代码语言:javascript 复制 struct work_struct{atomic_long_t data;struct list_head entry;work_func_t func;//函数指针,指向func函数#ifdefCONFIG_...