多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 10.6. 快速参考 本章中介绍了这些关于中断管理的符号: ~~~ #include <linux/interrupt.h> int request_irq(unsigned int irq, irqreturn_t (*handler)( ), unsigned long flags, const char *dev_name, void *dev_id); void free_irq(unsigned int irq, void *dev_id); ~~~ 调用这个注册和注销一个中断处理. ~~~ #include <linux/irq.h.h> int can_request_irq(unsigned int irq, unsigned long flags); ~~~ 这个函数, 在 i386 和 x86_64 体系上有, 返回一个非零值如果一个分配给定中断线的企图成功. ~~~ #include <asm/signal.h> SA_INTERRUPT SA_SHIRQ SA_SAMPLE_RANDOM ~~~ 给 request_irq 的标志. SA_INTERRUPT 请求安装一个快速处理者( 相反是一个慢速的). SA_SHIRQ 安装一个共享的处理者, 并且第 3 个 flag 声称中断时戳可用来产生系统熵. ~~~ /proc/interrupts /proc/stat ~~~ 报告硬件中断和安装的处理者的文件系统节点. ~~~ unsigned long probe_irq_on(void); int probe_irq_off(unsigned long); ~~~ 驱动使用的函数, 当它不得不探测来决定哪个中断线被设备在使用. probe_irq_on 的结果必须传回给 probe_irq_off 在中断产生之后. probe_irq_off 的返回值是被探测的中断号. ~~~ IRQ_NONE IRQ_HANDLED IRQ_RETVAL(int x) ~~~ 从一个中断处理返回的可能值, 指示是否一个来自设备的真正的中断出现了. ~~~ void disable_irq(int irq); void disable_irq_nosync(int irq); void enable_irq(int irq); ~~~ 驱动可以使能和禁止中断报告. 如果硬件试图在中断禁止时产生一个中断, 这个中断永远丢失了. 一个使用一个共享处理者的驱动必须不使用这个函数. ~~~ void local_irq_save(unsigned long flags); void local_irq_restore(unsigned long flags); ~~~ 使用 local_irq_save 来禁止本地处理器的中断并且记住它们之前的状态. flags 可以被传递给 local_irq_restore 来恢复之前的中断状态. ~~~ void local_irq_disable(void); void local_irq_enable(void); ~~~ 在当前处理器熵无条件禁止和使能中断的函数.