013_Linux驱动之_poll机制

  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
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值