linux notifier
来源:互联网 发布:生物多样性计算软件 编辑:程序博客网 时间:2024/04/30 16:21
Linuxnotifier技术
内核通知链介绍(引用网络资料):
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。例如,可以通过通知链来获取某总线上的设备增加、删除情况,来动态添加和卸载dev文件设备。
Linux内核中包含四种类型通知链:
Atomic notifierchains: 这种类型通知链回调函数在中断上下文中运行,不能被阻塞;
Blockingnotifier chains: 回调函数运行在进程上下文中,可以阻塞;
Raw notifierchains: 通知链回调函数在运行位置上没有限制,所有锁和保护都由调用都实现;
SRCU notifierchains:阻塞型通知链变种,回调函数运行在进行上下文;
通知链可以由structnotifier_block结构来描述
Struct notifier_block{
Int (*nitifier_call)(structnotifier_block *, unsigned long, void *); // 回调函数
Struct notifier_block __rcu *next;
Int priority;
}
以blocking notifierchain为例说明通知链使用:
1.) 定义通知链表头;
Struct blocking_notifier_head bus_notifier;
2.)初始化链表头
BLOCKING_INIT_NOTIFIER_HEAD(&bus_notifier);
3.)定义一个notifier,并增加notifier到通知链
Inti2cdev_notifier_call(struct notifier_block *nb, unsigned long action, void*data)
{
Strcutdevice *dev = data;
Switch(action) {
case BUS_NOTIFY_ADD_DEVICE:
……..
case BUS_NOTIFY_DEL_DEVICE:
…..
}
Return 0;
}
Structnotifier_block i2cdev_notifier = {
.notifier_call =i2cdev_notifier_call,
};
Blocking_notifier_chain_register(&bus_notifier,&i2cdev_notifier);
4.)当所监控的模块或子系统发生对应事件时,调用notifier_call函数通知监控者
Blocking_notifier_call_chain(&bus_notifier,BUS_NOTIFY_ADD_DEVICE, dev);
I2cdev_notifier_call函数被调用:
- linux notifier
- linux notifier
- linux notifier
- linux notifier
- Linux Notifier Chains
- Linux Notifier Chains
- Linux Notifier Chains mechanism
- Linux notifier chain机制
- Linux Notifier Chains
- Linux Notifier机制
- Linux Notifier Chains
- Linux Notifier Chains
- linux notifier chains机制
- Linux Notifier Chains
- Linux内核Notifier机制
- Notifier
- Linux内核通知链notifier
- Linux内核通知链notifier
- 九度 题目1120:全排列
- 面试必会代码总结
- swift: 数组的增 删 改 除
- JAVA截屏
- Java中堆内存和栈内存详解
- linux notifier
- Tomcat内存释放不了、Tomcat内存溢出原因、Tomcat内存管理
- ruby简单的基础 4
- Android手机ERP开发(二)
- 开发经验分享
- RazorSQL简介
- 归并排序
- 编辑文章 - 博客频道 - CSDN.NET
- 含有 "Saber" 关键字的文章