总体框架和普通的字符型驱动是一样的,不过有一些不同:
(1)在open函数中注册中断程序
request_irq( unsigned int irq, //中断号
irqreturn_t (*handler)( int , void * ,struct ptregs *), //中断处理函数
unsigned long flag, //中断触发类型
const char *dev_name, //在 /proc/interrupt 中的名字
void *dev_id //区分设备的标识
);(2)在close函数中释放注册表
free_irq
(<pre name="code" class="cpp">unsigned int irq,<pre name="code" class="cpp">const char *dev_name
);
(3)使用唤醒进程的方法
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static volatile int ev_press = 0;
wait_event_interruptible(button_waitq, ev_press); //在read函数中,如果ev_press为0,则进程休眠,记得休眠结束完成操作后将ev_press置0,在中断处理函数中将其置1
747

被折叠的 条评论
为什么被折叠?



