阻塞式访问和非阻塞式访问, 按键延时去抖。
1、设备的阻塞方式访问 应用编程 sd=socke(...) recv(sd, ....)//无数据阻塞等待 有数据立即返回 希望按键设备 也能达到在用户空间阻塞方式访问 内核中为了实现设备的阻塞方式访问,提供了一套机制: 等待队列 核心数据结构 wait_queue_head_t 实验步骤: 1)定义一个等待队列头变量 wait_queue_head_t btn_wqh; 2) 初始化等待队列头变量 init_waitqueue_head(&btn_wqh); //等价于步骤1) 2) DECLARE_WAIT_QUEUE_HEAD(btn_wqh) 3) 驱动程序中,对设备执行读写操作时 如果设备I/O为就绪 可以调用以下函数, 实现进程的阻塞 //该函数会使得调用者进程进入睡眠状态 wait_event(btn_wqh, condition) //进入的是可中断的睡眠状态 wait_event_interruptible(btn_wqh, condition) condition,为TRUE 直接返回 不睡眠 为FALSE,进程进入睡眠状态 4)当设备I/O就绪时 唤醒因I/O未就绪而进入睡眠状态的进程 wake_up(&btn_wqh); wake_up_interruptible(&btn_wqh); 实现原理: 1)内核中管理进程,会为每个进程建立PCB(进程控制块)