阅读:1275回复:3
关于 request_irq 的困惑???
刚开始写驱动,需要用到 request_irq 关键在于他最后一个参数,我怎么也理解不了该怎么用到我的驱动里??各位高手请帮忙!!
首先,我不能在最后一个参数用NULL,因为我要共享 10 11两个中断,其次我看很多地方说最后一个参数的时候,都是“可以用设备的device结构就可以”这么一句简单的套话,可是我的设备是一个全新的设备也就说是公司自己设计的一个,那我这个所谓的 device 结构是什么呀,试验过程中,我自己的随便定义了个结构 typedef struct { short major; /* major device number */ short minor_start; /* start of minor device num */ } keyboard_struct; keyboard_struct *keyboard_devid; 然后就开始用 result = request_irq(OFFLINE_IRQ,keyboard_offline,SA_INTERRUPT|SA_SHIRQ,"keyboard drv",keyboard_devid); if ( result != 0) { printk("Can not request %d irq!\n",OFFLINE_IRQ); return -EBUSY; } void keyboard_offline(int irq, void *dev_id, struct pt_regs *regs) { } 来申请中断了,编译和加载模块倒也过了,问题是,10号中断与一块网卡是共享的,结果模块加载后,我的中断处理程序 keyboard_offline 就一直不停的收到中断,按理说不应该呀,我究竟怎么能让Linux把真正我需要的中断交给我的中断处理程序呢???? 书上说Linux会根据中断号和最后一个参数 dev_id来判断该给哪个中断处理程序,可是为什么我这里不行呢?? 请高手赐教,先行谢过!!! |
|
沙发#
发布于:2004-03-05 16:21
这个论坛难道不给分就没人回答问题吗???!!
拜托各位老大,照顾一下新人 |
|
板凳#
发布于:2004-03-08 09:25
竟然没人回复,是不是我这个问题太难了还是有点too simple呀
|
|
地板#
发布于:2004-03-08 17:40
最后一个参数是中断发生时,调用中断处理函数时传的参数,当然可以使用自己定义任何东西。
发生中断时,所有共享中断号的处理函数都会被调用,需不需要处理就看你的中断处理函数如何写了 |
|