导读 | 随着现代CPU的复杂度加大,外设中断数量增加,实际上系统可能同时需要多个中断控制器进行级联,面对这样的趋势,Linux引入了irq domain这个概念。 |
对于Linux系统中所有的interrupt controller都会形成树状结构,对于每个interrupt controller都可以连接若干个外设的中断请求,interrupt controller会对连接其上的interrupt source进行编号(也就是HW interrupt ID,后面我们叫hirq),但这个编号仅仅限制在本interrupt controller范围内。既然存在hirq,那么在系统软件中, 就存在一个全局统管的编号,这个编号可以定位控制器和控制器中的中断号,我们把这个编号叫做virq(我们在Linux系统中调用API request_irq中需要的irq号 实际上是virq号)。对于中断级联,我们以TI的TiTDA系列为例,如下图:
如上图,该CPU是直接连接在中断控制器GICv3上面的,但是GIC不是直接和设备相连,而是与INTR控制器连接,而INTR控制器又与INTA控制器连接,最后INTA控制器才直接和设备相连。在这里其实就简单的形成了一个简单的树形结构。