内核模块通知链:
1、通知者定义通知链: #define BLOCKING_NOTIFIER_HEAD(name) struct blocking_notifier_head name = BLOCKING_NOTIFIER_INIT(name)
2、被通知者注册回调函数:int blocking_notifier_chain_register(struct blocking_notifier_head *nh, struct notifier_block *n);
3、通知者通知事件:int blocking_notifier_call_chain(struct blocking_notifier_head *nh, unsigned long val, void *v);
work queue :
1、接口
|
序号 |
接口函数 |
注释 |
|
1 |
create_workqueue |
用于创建一个workqueue队列,为系统中的每个CPU都创建一个内核线程。输入参数: @name:workqueue的名称 |
|
2 |
create_singlethread_workqueue |
用于创建workqueue,只创建一个内核线程。输入参数: @name:workqueue名称 |
|
3 |
destroy_workqueue |
释放workqueue队列。输入参数: @ workqueue_struct:需要释放的workqueue队列指针 |
|
4 |
schedule_work |
调度执行一个具体的任务,执行的任务将会被挂入Linux系统提供的workqueue——keventd_wq输入参数: @ work_struct:具体任务对象指针 |
|
5 |
schedule_delayed_work |
延迟一定时间去执行一个具体的任务,功能与schedule_work类似,多了一个延迟时间,输入参数: @work_struct:具体任务对象指针 @delay:延迟时间 |
|
6 |
queue_work |
调度执行一个指定workqueue中的任务。输入参数: @ workqueue_struct:指定的workqueue指针 @work_struct:具体任务对象指针 |
|
7 |
queue_delayed_work |
延迟调度执行一个指定workqueue中的任务,功能与queue_work类似,输入参数多了一个delay。 |
2、初始化一个work: INIT_WORK(_work, _func) ;
3、执行这个work: schedule_work(&_work);
本文详细介绍了Linux内核中模块通知链的工作原理及其API使用方法,并阐述了Workqueue机制的基本概念、常用接口及操作流程。
737

被折叠的 条评论
为什么被折叠?



