OK6410中断按键 混杂设备驱动

2014-11-24 10:36:39 · 作者: · 浏览: 0

平台:交叉工具链arm-linux-gcc 4.3.2 linux2.6.28


request_irq的作用是申请使用IRQ并注册中断处理程序。
request_irq()函数的原型如下:
/* kernel/irq/manage.c */
int request_irq(
unsigned int irq,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long irqflags,
const char *devname,
void *dev_id );


当使用内核共享中断时,request_irq必须要提供dev_id参数,并且dev_id的值必须唯一


将使用该中断处理程序的设备结构体传递给该中断处理程序:
首先看两个基础条件:
1) 内核中的各个设备结构体肯定是唯一的,因此满足dev_id唯一这个要求
2) dev_id参数会在发生中断时传递给该中断的服务程序。
典型的中断服务程序定义如下:


static irqreturn_t intr_handler(int irq, void *dev_id, struct pt_regs *regs);


即request_irq的dev_id参数会传递给该中断服务程序的dev_id。因此也可以将驱动程序的设备结构体通过dev_id传递给中断服务程序。


button1.c


Makefile