设备驱动中的中断处理详解
1. 中断请求概述
中断请求(IRQ)可来自不同源,如GPIO、EXTI或片上外设。不同设备可共享同一中断线,即共享一个IRQ。在Linux中,IRQ号是机器上不同中断源的枚举,通常枚举的是系统中所有中断控制器的输入引脚数量。它是虚拟中断ID,与硬件无关。
Linux内核使用单个大编号空间,为每个独立的IRQ源分配不同编号。在只有一个中断控制器的系统中,这很简单;但在有多个中断控制器的系统中,内核需确保每个控制器分配到不重叠的Linux IRQ编号。
现代片上系统(SoC)中,注册为irqchips的中断控制器数量不断增加。过去,IRQ号可选择与进入根中断控制器的硬件IRQ线匹配,但现在它只是一个编号。因此,需要一种机制将控制器本地的中断编号(硬件irq,hwirq)与Linux IRQ编号分开。
2. 中断控制器相关数据结构
2.1 irq_chip结构
中断控制器驱动(依赖特定架构)会向内核注册一个irq_chip结构,该结构包含一组指向管理中断控制器IRQ的函数的指针。其声明如下:
/*
* struct irq_chip - hardware interrupt chip descriptor
* @parent_device: pointer to parent device for irqchip
* @name: name for /proc/interrupts
* @irq_startup: start up the interrupt (def
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



