设备驱动中的中断处理详解
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 (defaults to ->enable
超级会员免费看
订阅专栏 解锁全文
2406

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



