3

据我所知,Windows 系统中有 255 个虚拟 IRQ(芯片组只允许 16 个物理 IRQ),它们通常都使用物理 IRQ 11。在 Linux 系统中,还有一个虚拟 IRQ 的概念。

所以,我很感兴趣这个映射是如何实现的?来自 Linux 内核或只是算法的源代码示例将不胜感激。

4

1 回答 1

5

中断处理的具体实现会因架构和平台而异。这个答案主要针对Linux,因为源代码可用。至少对于 Linux,有一个通用的 IRQ 处理层,驱动程序是针对该层编写的,以便驱动程序可以在体系结构之间兼容,而与底层中断体系结构无关。

现代平台可能有多个中断控制器,因此它的平台特定代码处理请求的 IRQ 号request_irq()到特定中断控制器的映射。

mach-pxaPXAxxx 基础平台的 Linux 架构为例。平台irq.c文件包含两个struct irq_chip引用,指示两个不同的中断控制器。当pxa_init_irq()被调用时,它会为特定的中断控制器分配一个虚拟中断号。平台代码确保为每个可能的中断源分配唯一的中断号。

有很多细节过于详细,无法在此处发布,因此我建议获取 Linux 源代码的副本并深入研究。如果您正在寻找映射,请专门查看不同的arch目录。

如果你make htmldocs从顶层做一个,你会得到一个Documentation/DocBook/index.html你可以细读的。有关更多详细信息,请查看该genericirq部分。

此外,Linux Device Drivers, Corbet, Rubini, Kroah-Hartman一书是一个极好的信息来源。

于 2013-03-13T23:29:39.660 回答