kthread_init_work和kthread_init_worker一样,也是一个宏,它有两个参数,第一个参数work传入的是要初始化的kthread_work结构,第二个参数fn传入的是给kthread_work指定的处理函数。kthread_init_work初始化tkhread_work,设置了tkread_work的处理函数。 前面虽然初始化了kthread_worker、kthread_work结构,创建了处...
kthread_init_work(&kwork0, kwork_callback);//初始化kthread_work,设置work执行函数kwork_callbacksched_setscheduler(bsb_ctx->bsb_kworker_task, SCHED_FIFO, ¶m); \\修改kworker线程的调度机制为FIFO运行 kthread_queue_work(&kworker, &kwork0);//将work挂到worker上,然后该线程就会去调度执行这个...
struct kthread_work hi_work;//声明一个kthread_work kthread_init_work(&hi_work, xxx_work_fn); //初始化kthread_work,设置work执行函数. 2.3、启动 work 上面两步准备好了 worker 和 work,如果有需要处理的 work 的话,那么需要把这个 work 挂到 worker 上: kthread_queue_work(&hi_worker, &hi_...
struct kthread_work, node); list_del_init(&work->node); } spin_unlock_irq(&worker->lock); if(work) { __set_current_state(TASK_RUNNING); work->func(work); smp_wmb();/* wmb worker-b0 paired with flush-b1 */ work->done_seq = work->queue_seq; smp_mb();/* mb worker-b1 p...
INIT_WORK(&create.work, keventd_create_kthread); //可见创建的工作是在keventd_create_kthread函数内进行 /*The workqueue needs to start up first:*/ if (!helper_wq) //这个系统启动后正常是已经初始化了的 create.work.func(&create.work); //如没初始化那只有在当前进程下完成工作了而不是在kth...
struct kthread_work work = KTHREAD_WORK_INIT(work, fn) 2.3 初始化 init_kthread_work宏和 init_kthread_worker宏: [cpp] view plain copy #define init_kthread_worker(worker) \ // 初始化 kthread_worker do { \ static struct lock_class_key __key; \ __init_kthread_worker((worke...
INIT_WORK(&create.work, keventd_create_kthread); //可见创建的工作是在keventd_create_kthread函数内进行 /*The workqueue needs to start up first:*/ if (!helper_wq) //这个系统启动后正常是已经初始化了的 create.work.func(&create.work); //如没初始化那只有在当前进程下完成工作了而不是在kth...
{ struct kthread_create_info create; //下面五行初始化kthread_create_info create.threadfn = threadfn; create.data = data; init_completion(&create.started); init_completion(&create.done); INIT_WORK(&create.work, keventd_create_kthread); //可见创建的工作是在keventd_create_kthread函数内进行...
INIT_WORK(&work_test, work_test_func); 将work添加到work queue中: queue_work(workqueue_test, &work_test); 也可以使用系统预定义的work queue,好处是节省资源,不用再追加一个新的work queue定义;坏处是很多work可能都会挂到这个work queue上,自己的work响应不是那么及时。
在kernel进入c语言阶段后,会开始执行start_kernel函数,它负责进行kernel正式运行前各个功能的初始化:打印一些信息、内核工作城要的模块的初始化被依次调用(譬如内存管理、调试系统、异常处理...),最后末尾调用了一个rest_init函数启动了三个进程(idle、kernel_init、kthreadd),来开启操作系统的正式运行。 (1)idle是操...