查询:消耗资源

中断:read 一直要去读
poll :指定起始时间
异步通知
signal 测试程序
include <stdio.h>
include <signal.h> void my_signal(int signum)
{
static unsigned int cnt;
printf("signum = %d, %d timer\n",signum ,++cnt);//liunx 命令行中是行缓冲的。
}
int main(int argc,char **argv)
{
signal(SIGUSR1,my_signal);
while()
{
sleep();
}
return ;
}
kill -USR1 PID  发送信号给进程

信号的要点
  1. 先注册一个信号处理函数 signal(SIGUSR1,my_signal);
  2. 谁来发送信号
  3. 发给谁
  4. 谁来接受信号
目标:按下按键时驱动程序通知应用程序
  1. 应用程序注册信号处理函数
  2. 谁发送信号:驱动程序
  3. 发给谁:发给应用程序 app=>告诉驱动自己的PID
  4. 怎么发:kill_fasync()

在应用程序中:

signal(SIGIO,my_signal);//开启异步通知
 
fcntl(fd, F_SETOWN, getpid());//获取自身的PID getpid() 也就是确定发给谁这个问题
 
Oflags = fcntl(fd, F_GETFL); //获取当前的flag
 
fcntl(fd, F_SETFL, Oflags | FASYNC);//修改当前Flag 设置为异步通知的Flag
在驱动程序中
通知应用程序有信号来了
fasync_helper(fd, file, on, &button_signal); 的目的是为了 初始化 button_signal
button_signal 在文件中定义:static struct fasync_struct *button_signal;
 
 
目的:通过驱动程序来通知应用程序 来读某些东西。
 
 
 

liunx驱动----异步通知的更多相关文章

  1. Linux的fasync驱动异步通知详解【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51851338 版权声明:本文为博主原创文章,未经博主允许不得转载. 工作项目用有 ...

  2. Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)

    信号  ( signal ) 机制是 UNIX 系统中最为古老的进程间通信机制,很多条件可以产生一个信号. 信号的产生: 1,当用户按下某些按键时,产生信号. 2,硬件异常产生信号:除数为 0 ,无效 ...

  3. 嵌入式Linux驱动学习之路(十三)按键驱动-异步通知

    之前的按键方式: 查询: 极度占用CPU资源 中断: 在读的时候产生休眠,在没有信号的时候永远不会返回. poll机制: 在中断的基础上加上超时时间. 异步通知就是通过信号来传送. 首先在应用程序中有 ...

  4. 入门级的按键驱动——按键驱动笔记之poll机制-异步通知-同步互斥阻塞-定时器防抖

    文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键, ...

  5. linux设备驱动归纳总结(三):7.异步通知fasync【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-62725.html linux设备驱动归纳总结(三):7.异步通知fasync xxxxxxxxxxx ...

  6. arm驱动linux异步通知与异步IO【转】

    转自:http://blog.csdn.net/chinazhangzhong123/article/details/51638793 <[ arm驱动] linux异步通知与 异步IO> ...

  7. Linux设备驱动中的异步通知与异步I/O

    异步通知概念: 异步通知的意识是,一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步IO”,信号是在软件层次 ...

  8. Linux驱动技术(四) _异步通知技术

    异步通知的全称是"信号驱动的异步IO",通过"信号"的方式,放期望获取的资源可用时,驱动会主动通知指定的应用程序,和应用层的"信号"相对应, ...

  9. 蜕变成蝶~Linux设备驱动之异步通知和异步I/O

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代.异步通知类 ...

随机推荐

  1. python飞机大战代码

    import pygame from pygame.locals import * from pygame.sprite import Sprite import random import time ...

  2. 熟悉Linux常用命令

    cd命令:切换目录 (1)切换到目录 /usr/localcd / usrcd / local (2)去到目前的上层目录cd .. (3)回到自己的主文件夹cd ls命令:查看文件与目录 (4)查看目 ...

  3. VIm快捷操作

    vim快捷操作 移动 行级移动 $ 行尾 0 行头 段级移动 { 段首 } 段尾 屏幕级别 L: 屏幕尾部 H: 屏幕头部 文档级别 G: 文档尾部 1G:头部 nG:文档n行 删除 dd: 删除当前 ...

  4. 在linux服务器新添加硬盘,如何识别、挂载。

    在linux服务器新添加硬盘,如何识别.怎样挂载磁盘.过程是怎么样. fdisk - manipulate disk partition tablemkfs - build a Linux files ...

  5. Babylon.js demo

    demo地址   访问demo  全屏试试  感觉很棒 在线文档  搜索:Default rendering pipeline demo源码在线调试地址

  6. redis相关操作

    #连接主机 redis-cli -h 192.168.2.109 -p 6379 #通过密码登录 auth "yourpassword" #存取值 set hello world ...

  7. ant安装报错:ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.

    后来发现问题原因是没有设置classpath,或者是\的原因: 正确配置如下:  ANT_HOME:D:\ant\apache-ant-1.10.5 CLASSPATH: %ANT_HOME%\lib ...

  8. Get WMS Static GoodLocation By Dynamic SQL

    Dynamic SQL Store Procedure: Note: use variable,you need convert varchar and as a variable,not direc ...

  9. jenkin如何实现web版本控制&回退

    jenkins本身作为一款运维利器,具备 1. 持续集成 (Continuous integration) 2. 持续交付(Continuous delivery) 3. 持续部署(continuou ...

  10. btcpool之GbtMaker

    一.简介 GbtMaker全称getblocktemplate maker,它通过getblocktemplate rpc接口从bitcoind获得挖矿所需数据,然后把该数据发送到kafka消息队列. ...