Forest_Leo
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1275回复:3

关于 request_irq 的困惑???

楼主#
更多 发布于:2004-03-05 15:20
刚开始写驱动,需要用到 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来判断该给哪个中断处理程序,可是为什么我这里不行呢??


请高手赐教,先行谢过!!!

Forest_Leo
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-05 16:21
这个论坛难道不给分就没人回答问题吗???!!
拜托各位老大,照顾一下新人
Forest_Leo
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-08 09:25
竟然没人回复,是不是我这个问题太难了还是有点too simple呀
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-08 17:40
最后一个参数是中断发生时,调用中断处理函数时传的参数,当然可以使用自己定义任何东西。
发生中断时,所有共享中断号的处理函数都会被调用,需不需要处理就看你的中断处理函数如何写了
游客

返回顶部