上一篇文章介绍了linux kernel中的中断系统,这边文章简单介绍在内核中如何使用中断编程。
首先编写中断程序需要注意的事项
- 中断处理函数中不能睡眠,也不能调用执行了睡眠动作的函数
- 当中断处理函数有部分代码进入临界区时,使用自旋锁,而不是使用互斥锁,因为获取互斥锁获取不到的时候,会进入睡眠状态。
- 中断处理函数不能与用户空间交换数据
- 必须尽快执行中断处理程序。为了确保这一点,最好将实现分为两部分,上半部分和下半部分。处理程序的上半部分将尽快完成工作,稍后再完成下半部分工作,这可以通过 softirq 或 tasklet 或工作队列来完成。
- 中断处理程序不能重复调用。当中断处理程序已经在执行时,必须禁用其相应的IRQ,直到处理程序完成。
- 中断处理程序可以被更高权限的处理程序中断。如果不想被高优先级的处理程序中断,可以将中断处理程序标记为快速处理程序。但是,如果将太多的标记为快速处理程序,则系统性能会下降,因为中断延迟会更长。
与中断相关的函数
request_irq(unsigned int irq, irq_handler_t