Linux2.6 中断处理函数和申请中断函数的变化
2010-10-01 16:49
218 查看
Linux2.6 中断处理函数和申请中断函数的变化
2009-07-29 08:46
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内核给源代码,每个版本之间的变化,就像你写的代码,进行了修改,就需要修改其他的相关代码来配合变化。 既是折磨又是享受。 |
相关文章推荐
- Linux 2.6 Alarm信号中断遇上函数阻塞
- linux中断子系统(二) - 注册用户中断处理函数
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(一)
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(一)
- linux下IRQ和软中断处理函数定义
- Linux如何区分注册到同一个IRQ上的不同中断处理函数
- linux驱动由浅入深系列:中断申请及下半部处理机制
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(一)
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
- linux中断子系统(一) - 注册系统中断处理函数
- AT91SAM9261的LINUX2.6 GPIO与GPIO中断
- (cc)2.6版本Linux上替换系统调用函数实现隐藏文件学习
- MIPS-LINUX-中断处理
- Linux设备驱动编程之中断处理
- LINUX内核设计思想之中断和中断处理程序
- Linux的时间与时钟中断处理
- ora-04091 表XX发生了变化 触发器/函数不能读 的错误处理
- inotify -- Linux 2.6 内核中的文件系统变化通知机制