1. 功能:poll的机制与select相似,与select在本质上没有多大差别。管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制。

2. 技术资料:poll多路复用 这篇文章写得很好
3. 技术资料:poll机制分析
4. 首先我们看应用程序中poll的调用原型
                                   //文件                        数量                          时间以毫秒为单位
static unsigned int poll(struct file *file, struct socket *sock,poll_table *wait)
5. 首先我们看看简单应用程序中如何使用的

6. 第一点中我们定义一个pollfd的数组变量,为什么是数组呢,因为调用poll函数时候可以同时调用很多个,所 以第三点传入数组地址时候就能够同时调用很多个

第二点我们设置了文件和事件,具体其他的可以看看poll多路复用
第三点就是我们应用程序中调用了,当我们运行这个时候,会调用到驱动程序中的.poll机制的程序
 
7. 当我们上面运行应用程序时候,调用到ret = poll(fds, 1, 5000);这条时候驱动程序中就会运行forth_drv_poll函数

 
8. 从上面看,当调用到驱动程序之后会在poll_wait(file, &button_waitq, wait);停下来
9. 解析poll_wait,函数原型
//                                          文件            等待队列头             poll_table就是传入的时间
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
10.解析上面图片中poll_wait(file, &button_waitq, wait);

从上面三张图片程序运行时从应用程序到驱动程序的参数传递。

也就是说应用程序传递给可poll_wait的文件file和时间wait=5000MS
button_waitq是等待队列头012_Linux驱动之_wait_event_interruptible
11. 当运行到poll_wait时候,进程就会挂到button_waitq的等待队列中去
想要就行往下运行,则需要
1. button_waitq的头队列被唤醒
2. 时间wait超过5000ms

013_Linux驱动之_poll机制的更多相关文章

  1. Linux设备驱动之semaphore机制【转】

    转自:http://blog.csdn.net/xiao229404041/article/details/7031776 Linux设备驱动之semaphore机制在Linux系统中,信号号是一种重 ...

  2. linux设备驱动编写_tasklet机制

    在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成. 为了最大程度的避免中断处理时间过长而导致中断丢失,有时 ...

  3. linux设备驱动编写_tasklet机制(转)

    在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成. 为了最大程度的避免中断处理时间过长而导致中断丢失,有时 ...

  4. Linux驱动之poll机制的理解与简单使用

    之前在Linux驱动之按键驱动编写(中断方式)中编写的驱动程序,如果没有按键按下.read函数是永远没有返回值的,现在想要做到即使没有按键按下,在一定时间之后也会有返回值.要做到这种功能,可以使用po ...

  5. 字符设备驱动笔记——poll机制分析(七)

    poll机制分析 所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数.比如系统调用open.read.write.poll,与之对应的内核函数为:sys_open. ...

  6. linux字符驱动之poll机制按键驱动

    在上一节中,我们讲解了如何自动创建设备节点,实现一个中断方式的按键驱动.虽然中断式的驱动,效率是蛮高的,但是大家有没有发现,应用程序的死循环里的读函数是一直在读的:在实际的应用场所里,有没有那么一种情 ...

  7. Linux 设备驱动之 UIO 机制(基本概念)

    一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logica ...

  8. Linux 设备驱动之 UIO 机制

    一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logica ...

  9. Android驱动学习-内部机制_回顾binder框架关键点

    内部机制_回顾binder框架关键点server注册服务时, 对每个服务都提供不同的ptr/cookie,在驱动程序里对每个服务都构造一个binder_node, 它也含有ptr/cookie cli ...

随机推荐

  1. php 配置微信公众号

    首先你要在微信公众号官网申请一个公众号,然后登录进去 在网页的左下方找到开发的基本配置 就可以开始配置服务器下面的东西了 点击打开成这个样子的 就是一些参数,url填写你自己服务器的具体地址就好了,我 ...

  2. javascript 正则表达式的简单操作

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! RegExp 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模 ...

  3. win10下PLSQL Developer 连接ubuntu上安装的oracle 11g

    说明:过程记录的不是很相信,只记录基本步骤.并不适合想一步一步照做的同学. win10下需要的操作 1.微软官网下载instantclient,然后接到到本地一个文件夹,注意路径不要又空格,中文和括号 ...

  4. Vue路由嵌套

    Vue路由嵌套 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. vue兄弟组件的传值eventbus

    注:当在a.vue组件上触发点击事件时,就会触发bus上监听的事件,而bus事件监听在b.vue里面,这个时候就会触发b.vue 上的事件监听,而通过回调函数,就可以拿到a.vue组件传过来的数据,从 ...

  6. Java 面向对象(五)抽象

    一.抽象概述 1.由来 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同.那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了. 我们把没有方法主体的方法称为抽象方法. ...

  7. 安装theano踩过的坑(gpu)

    参考 http://deeplearning.net/software/theano/install.html TensorFlow出了点问题 python3.7的环境 pip安装 keras已经安装 ...

  8. 利用jenkens+github实现简单的CI/CD

    一  获取github accessToken 依次点击 settings----> Developer settings --->Personal access tokens  到这里如 ...

  9. 【Hibernate】事务处理

    一.概述 一.概述 事务 事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!! 事务特性 原子性:事务一组操作不可分割. 一致性:事务的执行前后,数据完整性要保持一致. 隔离性:一个事务在执行的 ...

  10. MySQL操作规范总结

    来源:静以致远√团团 用户权限管理创建用户命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';说明:Username所创建的用户名hos ...