linux设备驱动--异步通知

原创 2012年03月21日 21:56:21

         异步通知意味着设备可以通知应用程序自身可被访问,实现了异步IO

        在ldd3中给出了设备驱动实现异步信号的详细操作顺序:

1.当发出 F_SETOWN,什么都没发生,除了一个值被赋值给 filp->f_owner.

2.F_SETFL 被执行来打开FASYNC, 驱动的 fasync方法被调用.这个方法被调用无论何时 FASYNC的值在 filp->f_flags中被改变来通知驱动这个变化,因此它可正确地响应.这个标志在文件被打开时缺省地被清除.我们将看这个驱动方法的标准实现。

3.当数据到达,所有的注册异步通知的进程必须被发出一个SIGIO 信号.


主要看下第二步和第三步:

第二步:

执行F_SETFL来打开FASYNC,调用驱动的fasync方法。

当我们利用fcntl系统调用来打开FASYNC时,调用过程如下:

SYSCALL_DEFINE3(fcntl,unsigned int, fd, unsigned int, cmd, unsigned long, arg)

{

structfile *filp;

longerr = -EBADF;


filp= fget(fd);

if(!filp)

gotoout;


err= security_file_fcntl(filp, cmd, arg);

if(err) {

fput(filp);

returnerr;

}


err= do_fcntl(fd, cmd, arg, filp);


fput(filp);

out:

returnerr;

}


do_fcntl中:

caseF_SETFL:

err= setfl(fd, filp, arg);

break;


setfl函数中:

if(((arg ^ filp->f_flags) & FASYNC) && filp->f_op &&

filp->f_op->fasync){

error= filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0);

if(error < 0)

gotoout;

if(error > 0)

error= 0;

}


这样我们就调用驱动中的fasync函数,该函数的是调用了

intfasync_helper(int fd, struct file * filp, int on, structfasync_struct **fapp)


fasync_helper函数与kill_fasync配套使用:fasync_helper函数用来建立fasync的队列;kill_fasync函数负责发送信号,这样应用层可以响应信号,实现异步IO


linux设备驱动异步通知

异步通知概念:一旦设备就绪,则主动通知应用程序,这样应用程序就根本不用查询设备状态。就是发送和接受signal...
  • xmzzy2012
  • xmzzy2012
  • 2015年02月26日 08:37
  • 204

linux设备驱动之异步通知

一.对异步通知的介绍                     首先明确异步通知的概念:当设备准备就绪时,主动的去通知应用程序。这样应用程序就可以不用一直的查询设备的状态,便可以节省很多资源。比...
  • wangerpiaini
  • wangerpiaini
  • 2017年02月23日 17:00
  • 73

Linux设备驱动之异步通知

Linux设备驱动之异步通知的原理及简单代码实现
  • ljmiaw
  • ljmiaw
  • 2017年07月16日 21:02
  • 91

Linux设备驱动编程之异步通知

结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬...
  • menuconfig
  • menuconfig
  • 2007年10月18日 13:39
  • 600

linux设备驱动开发——异步通知

异步通知很好理解,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态 , 特像硬件上常提的“中断的概念”。 比较准...
  • fan0520
  • fan0520
  • 2016年04月28日 22:18
  • 278

深入浅出 Linux设备驱动异步通知介绍

结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬...
  • ailinty
  • ailinty
  • 2011年09月01日 14:45
  • 342

Linux设备驱动一 (3)异步通知

异步通知,就是让驱动去告诉应用,底层硬件发生了什么事,而不是应用主动地去查询驱动,这对系统的性能有一个很大的提升。    应用层次         1、要用fcntl对此文件进行设置,      ...
  • dagefeijiqumeiguo
  • dagefeijiqumeiguo
  • 2016年12月27日 22:35
  • 161

linux设备驱动开发学习之旅--异步通知

[cpp] view plaincopy /**   * Author:hasen   * 参考 :《linux设备驱动开发详解》   * 简介:android小菜...
  • zhoudengqing
  • zhoudengqing
  • 2014年11月25日 17:55
  • 377

微信支付,异步通知

微信公众号配置共五个地方: 1、设置key:微信商户平台——账户设置——API安全——密钥设置 2、页面授权域名:用来过的openID,公众号设置——功能设置——设置【网页授权域名】(【js安全域名】...
  • myfmyfmyfmyf
  • myfmyfmyfmyf
  • 2016年12月05日 10:20
  • 4966

linux设备驱动开发详解(基于4.0内核)_读书笔记二

Linux设备驱动中的并发控制 有两种可能的原因会造成程序出错,一种可能性是编译乱序,另一种可能性是执行乱序。 处理器为了解决多核间一个核的内存行为对另一个核可见的问题,引入了一些内存屏蔽的指令。...
  • mchl0203
  • mchl0203
  • 2016年05月19日 10:18
  • 274
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux设备驱动--异步通知
举报原因:
原因补充:

(最多只允许输入30个字)