Linux2.6 中断处理函数和申请中断函数的变化

Linux2.6 中断处理函数和申请中断函数的变化
2009-07-29 08:46
今天练习了中断。
Linux设备驱动开发技术及应用 ,作者使用的是2.6.4,现在看来也很古老了,
按照书上的例子,免不了很多错。
例如代码里
自己定义的中断处理函数
irqreturn_t int_interrupt(int irq,void * dev_id,struct pt_regs *regs);
注册中断函数
request_irq(PRINT_IRQ,int_interrupt,SA_INTERRUPT,INT_DEV_NAME,NULL);


编译提示
警告:‘deprecated_irq_flag’ 已过时(于 include/linux/interrupt.h:64 声明)
警告:传递参数 2 (属于 ‘request_irq’)时在不兼容的指针类型间转换

既然如此,那就到头文件里看看request_irq,
http://lxr.linux.no/linux+v2.6.23.10/include/linux/interrupt.h#L94

extern int __must_check request_irq(unsigned int, irq_handler_t handler,
               unsigned long, const char *, void *);
没发现什么,再看看
typedef irqreturn_t (*irq_handler_t)(int, void *);

原来中断处理函数现在只有2个参数了,第三个参数struct pt_regs *regs保存的是中断发生时寄存器的值,
但是通常没有用,最后还是被取消了。

修改irqreturn_t int_interrupt(int irq,void * dev_id,struct pt_regs *regs);
为irqreturn_t int_interrupt(int irq,void * dev_id);
之后还是警告

原来头文件里没有SA_INTERRUPT了,一般使用IRQF_SHARED 了。
request_irq(PRINT_IRQ,int_interrupt,IRQF_SHARED,INT_DEV_NAME,NULL);

这样就可以了。网上看到很多人编译驱动也是这个问题,我想以后我做驱动移植的时候就可以直接改代码解决问题。

Linux内核给源代码,每个版本之间的变化,就像你写的代码,进行了修改,就需要修改其他的相关代码来配合变化。
既是折磨又是享受。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值