Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3547527
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2014-10-18 16:02:07

原文地址:驱动的一些例子 函数 作者:涛声508

DECLARE_WAIT_QUEUE_HEAD(name)

-- 生成一个等待队列头wait_queue_head_t,名字为name

Linux中断的注册与释放:
, , 实现中断注册接口:
int request_irq(unsigned int irq,irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long flags, const char *dev_name,void *dev_id);
void free_irq(unsigned int irq, void *dev_id);
函数参数说明:
unsigned int irq:所要注册的中断号
irqreturn_t (*handler)(int, void *, struct pt_regs *):中断服务程序的入口地址。
unsigned long flags:与中断管理有关的位掩码选项有三组值:
1. SA_INTERRUPT :快速中断处理程序,当使用它的是后处理器上所有的其他中断都被禁用。
2. SA_SHIRQ :该中断是在设备之间可共享的
3. SA_SAMPLE_RANDOM :这个位表示产生的中断能够有贡献给 /dev/random
和 /dev/urandom 使用的加密池.(此处不理解)
const char *dev_name:设备描述,表示那一个设备在使用这个中断。
第 5 个参数 dev_id 可作为共享中断时的中断区别参数,也可以用来指定中断服务函数需要参考的数据地址。

poll_wait() ---- 注册 poll 等待队列

应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上。此时,poll()函数上传递的参数包括含有设备文件信息的 struct file 结构体的指针参数struct file *filp ,以及追加到设备驱动上的poll_table结构体指针参数 poll_table *wait 。使用这两个参数,然后通过poll_wait()函数,在内核上注册输入输出复用条件。poll_wait() 函数表示如下:
#include
static
inline void poll_wait (struct file *filp, wait_queue_head_t*wait_address, poll_table *P);
关于应用程序中 poll() 的返回值
:

应用程序中调用 select() 和 poll() 函数, 使进程进入睡眠之前,内核先检查设备驱动程序上有无对应事件的状态,此时可通过查看 poll() 函数的返回值获得相关信息.

能够在返回值上使用的宏变量有以下组合:
POLLIN, POLLPRI, POLLOUT, POLLERR, POLLHUP, POLLNVAL, POLLRDNORM,  POLLRDBAND,  POLLWRNORM,  POLLWRBAND, POLLMSG,  POLLREMOVE

这些值中使用最多的是下面几个组合:
  • POLLIN | POLLRDNORM 表示可读
  • POLLOUT | POLLWRNORM 表示可写
  • POLLERR 表示出错

wait_event_interruptible()
:该函数修改task的状态为TASK_INTERRUPTIBLE,意味着改进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中。
    在wait_event_interruptible()中首先判断condition是不是已经满足,如果是则直接返回0,否则调用__wait_event_interruptible(),并用__ret来存放返回值。

wake_up_interruptible(&button_waitq);
功能:唤醒注册到等待队列上的进程
说明
唤醒 q 指定的注册在等待队列上的进程。该函数不能直接的立即唤醒进程,而是由调度程序转换上下文,调整为可运行状态。

阅读(353) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~