linux驱动之等待队列

linux驱动中,等待某种的事件发生的工作最好不要使用不断循环来完成,而是采用另外一种方法,休眠与唤醒。

等待队列工作过程就是睡眠和唤醒的过程

睡眠和唤醒的过程的基本原理,当驱动程序等待事件发生时候进入休眠状态,当该事件发生后,就会唤醒休眠状态的驱动代码。

使用:

static DECLARE_WAIT_QUEUE_HEAD(button_waitq);     //定义初始化等待队列头

wake_up_interruptible(&button_waitq);              //唤醒  发出

wait_event_interruptible(button_waitq, ev_press);  // 等待事件 从阻塞中脱离ev_press是条件  若为真就不阻塞

例子:

如果读写设备文件的动作函数是dev_read()和dev_write(),在读之前一定要写入数据。

代码如下:

static DECLARE_WAIT_QUEUE_HEAD(button_waitq);//定义初始化

static sszie_t dev_read()

{

// flag=1 代表写入数据,0表示没写入

wait_event_interruptible(button_waitq, flag);

......//处理业务逻辑代码

}

static  ssize_t dev_write()

{

.....//处理业务逻辑代码

flag=1;

wake_up_interruptible(&button_waitq);

}

时间: 2024-08-02 08:04:45

linux驱动之等待队列的相关文章

linux驱动---等待队列、工作队列、Tasklets【转】

转自:https://blog.csdn.net/ezimu/article/details/54851148 概述: 等待队列.工作队列.Tasklet都是linux驱动很重要的API,下面主要从用法上来讲述如何使用API. 应用场景: 等待队列(waitqueue) linux驱动中,阻塞一般就是用等待队列来实现,将进程停止在此处并睡眠下,直到条件满足时,才可通过此处,继续运行.在睡眠等待期间,wake up时,唤起来检查条件,条件满足解除阻塞,不满足继续睡下去. 工作队列(workqueu

Linux驱动开发盲点笔记1

1. vim中在找到搜索目标后,使用n与N进行定位查找 2. vim中使用gg到最好第一行,使用xxxG到某一行,否则G直接到最后一行: 3. ln -s 产生的链接文件最终指向的目标文件src 新产生的当前软链接文件dst. ln -s project(磁盘上实际存在的文件或者目录) a.lnk ln -s src dst(新产生的文件dst,dst链接到src) symlink功能类似 4 tar -czvf 最终生产的tar打包好的文件 待打包的文件或者文件夹 tar czvf a.tar

linux驱动面试题整理

资料来自网上,简单整理,答案后续补充...... 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也叫手动创建设备文件.还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后.那么在系统启动期间还有devfs创建了设备文件.一共有三种方式可

linux驱动之中断方式获取键值

linux驱动之中断方式获取键值 ------------------------------------------------------------------------------------------------------------------------------------------------------ 回想在单片机下的中断处理 分辨是哪个中断 调用处理函数 清中断 --------------------------------------------------

linux驱动面试题目汇总

http://blog.csdn.net/blueice8601/article/details/7666427 1.linux驱动分类 2.信号量与自旋锁 3.platform总线设备及总线设备如何编写 4.kmalloc和vmalloc的区别 5.module_init的级别 6.添加驱动 7.IIC原理,总线框架,设备编写方法,i2c_msg 8.kernel panic 9.USB总线,USB传输种类,urb等 10.android boot 流程 11.android init解析in

编写linux驱动所用到的头文件(转)

转自:http://blog.csdn.net/lufeiop02/article/details/6448497 关于linux驱动(应用)程序头文件使用 收藏 驱动程序: #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在li

【原创】-- linux驱动开发--【持续整理】

一.写在前面: 合格的linux驱动工程师需要满足下面的条件,本文的目标就是将这些条件原原本本的呈现给读者 1.有一定的硬件基础,懂得SRAM,Flash,SDRAM,磁盘的读写方式,了解UART,IIC,USB等设备接口,了解轮询,中断,DMA的原理,PCI总线的工作方式以及CPU的内存管理单元(MMU)等. 2.有一定的C语言基础,能够熟练使用结构体,指针,函数指针,以及内存的动态申请和释放. 3.有一定的linux你内核基础,内核部分难度较大,至少应了解驱动与内核接口. 4.有一定多任务并

Linux驱动之串口(UART)

<uart驱动程序概述> 在嵌入式Linux系统中,串口被看成终端设备,终端设备(tty)的驱动程序分为3部分: tty_core tty_disicipline tty_driver 包括3个结构体:uart_driver,uart_port,uart_ops(include/serial_core.h).因此,实现一个平台的uart驱动程序只要实现这3个结构体即可.   <uart_driver和tty_driver之间的关系> a:uart_driver结构体  uart_d

Linux驱动之定时器在按键去抖中的应用

机械按键在按下的过程中会出现抖动的情况,如下图,这样就会导致本来按下一次按键的过程会出现多次中断,导致判断出错.在按键驱动程序中我们可以这么做: 在按键驱动程序中我们可以这么做来取消按键抖动的影响:当出现一个按键中断后不会马上去处理它,而是延时一个抖动时间(一般10ms),如果在这个时间内再次出现中断那么再次延时10ms.这样循环,一直到在这个10ms内只有一个按键中断,那么就认为这次是真的按键值,然后在定时器处理函数里处理它.上述过程可以利用内核的定时器来实现. 定时器二要素:定时时间.定时时