驱动学习 之 异步通知
来源:互联网 发布:git上的java开源项目 编辑:程序博客网 时间:2024/05/10 02:17
异步通知的应用场合:
一个进在低优先级执行长的循环计算,但有需要很快的处理输入数据,如果该进程正在响应来自数据收集外设的新的观测数据,则应该在心数据可用时立即知晓并处理。————就是驱动程序主动通知应用程序,而不是应用程序查询。
写一个信号处理的应用函数的4点:
1. 注册信号处理函数
2. 谁发信号
3. 发给谁
4. 怎么发
写一个异步通知的驱动函数:
1.注册信号处理函数—— 应用程序 注册。
2.谁发 ——驱动
3。发给谁 ——应用程序告诉驱动它的PID
4.怎么发
从应用程序来看怎样通知内核启用一部通知机制
在应用程序中如下的代码段会启用 fd 文件到当前进程的异步通知机制:
signal(SIGIO,&input_handler);//input_handler信号处理函数
fcntl(STDIN_FILENO,F_SETOWN,getpid());//告诉驱动进程号
oflags=fcntl(STDIN_FILENO,F_GETFL);//
fcntl(STD_FILENO,F_SETFL,oflags | FASYNC);//在设备中设置FASYNC标志,
从内核角度来看驱动程序怎样实现异步信号
1. F_SETOWN被调用时对file->f_owner赋值,
2. 在执行F_SETFL 启用FASYNC时,调用驱动程序的fasync方法,只要file->f_flags中的FASYNC标志发生了变化,就会调用该方法,以便把这个变化通知驱动程序,使其能正确响应,
3. 当数据到达时,所有注册为异步通知的进程都会被发送一个SIGIO信号。
LINUX的这种通用方法基于struct fasync_struct 数据结构和int fasync_helper(int fd,struct file *file,int mode,struct fasync_struct **fa); 还有
void kill_fasync(struct fasync_struct **fa,int sig,int band);
当一个打开的文件的FASYNC标志碑修改时,调用fasync_helper以便从相关进程列表中增加或删除文件。在数据到达时可使用 kill_fasync通知所有相关的进程。它的参数包括要发送的信号(通常SIGIO)和带宽(band),后者几乎总是POLL_IN.
- 驱动学习 之 异步通知
- Linux 设备驱动学习之 异步通知
- linux驱动学习之异步通知
- linux驱动学习之异步通知
- linux驱动学习之异步通知 .
- 驱动编程之异步通知
- linux 驱动之异步通知
- linux驱动之异步通知
- linux设备驱动开发学习之旅--异步通知
- Linux驱动学习10(异步通知 )
- Linux设备驱动编程之异步通知
- 按键驱动的恩恩怨怨之异步通知
- 设备驱动之异步通知机制
- 嵌入式linux之按键驱动,异步通知
- Linux字符设备驱动之异步通知
- linux字符设备驱动之异步通知
- linux设备驱动之异步通知
- Linux设备驱动之异步通知
- OK6410平台下uboot的移植(第一步)
- 我的迈尔斯布里格斯类型指标(MBTI)
- Debian下安装中文输入法
- hibernate和mybatis的比较
- 厦大oj1438简单题、数学题(积分、几何概率、求最大公约数)
- 驱动学习 之 异步通知
- 透过如鹏网故障看DNS原理
- 如何让文本水平和垂直剧中
- 从头学习开发django系列-图书教程推荐
- poj3624-Charm Bracelet
- u盘install debian
- dos指令
- 查缺补漏 与 学习计划
- SQL2000的存储过程删除恢复