中断处理模型
1、概念解析
a) I/O操作的不确定因素以及处理器和I/O设备之间速度不匹配,设备往往通过某种硬件信号异步唤起处理器的注意
b) 这些硬件信号就称为 中断,每个设备都被分配了一个相关的标示符,别称为中断请求号(IRQ)
c) 处理器检测到某一 IRQ 号对应的中断产生时,它将停止工作并启动IRQ所对应的中断服务程序
d) 共享中断:多个设备使用同一个中断源;注销区分用设备号dev_id和 服务函数区分,共享中断的多个设备在申请中断时都要使用SA_SHIRQ标志,而一个设备以SA_SHIRQ申请某中断成功的前提是之前申请该中断的所有设备也都以SA_SHIRQ标志申请
2、分配IRQ(中断)号
a) 现代设备可直接分配
b) TQ210的硬件中断号是从32开始的,0-31的中断号分配给软中断
c) 现代设备能够响应对IRQ的查询(系统启动过程中由BIOS分配)
d) 系统中活动的IRQ列表:/proc/interrupts 文件中由记录
3、中断结构体详解
a) struct irq_desc 中的主要成员
i. * @irq_data: per irq and chip data passed down to chip functions
ii. * @action: the irq action chain,/* IRQ action list */
1. struct irqaction {
irq_handler_t handler; /*用户注册的中断处理函数放在这里*/
unsigned long flags; /*中断模式*/
void *dev_id; /*设备号*/
struct irqaction *next; /*将共享中断连接成单向链表*/
int irq; /*中断号*/
irq_handler_t thread_fn;
struct task_struct *thread;
unsigned long thread_flags;
unsigned long thread_mask;
const char *name; /*中断设备名*/
struct proc_dir_entry *dir; /*pointer to the proc/irq/NN/name entry*/
}
4、Linux 中断驱动设计函数解析
a) 头文件: