Linux中断子系统
有六个核心数据结构,分别是:
irq_desc
irq_data
irqactions
irq_chip
irq_domain
irq_domain_ops
关系如下:
强烈建议大家学习一个子系统之前,先研究这个子系统的核心数据结构
,知道了他们的关系,你就知道这个子系统在做什么事情。
右侧的 irq_chip、irq_domain、irq_domain_ops 是在系统启动流程中初始化完毕的,是系统相关的,有多少个中断控制器,就有多少个 irq_domain 和 irq_chip 。
系统有多少个中断控制器,从设备树中可以查看,查看哪些节点有 interrupt-controller 属性即可。
左侧的 irq_desc、irq_data、irqaction 是和单个中断相关的三个数据结构,每个中断都会有这三个数据结构。
每一个软件中断号 IRQ number,都有一个中断描述符 irq_desc,记录了这个中断的所有信息。
1、irq_domain
一个芯片可以有多个中断控制器,他们会级联,比如 EINT、GIC 等,每个中断控制器都有一个 irq_domain。
irq_dom