如何在Windows和Linux系统中实现物理到虚拟IRQ映射?

时间:2013-03-13 22:40:14

标签: c linux windows linux-kernel kernel

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

所以,我感兴趣的是如何实现这种映射?来自Linux内核或只是算法的Sourse代码示例将受到赞赏。

1 个答案:

答案 0 :(得分:5)

中断处理的确切实现因架构和平台而异。这个答案主要针对Linux提供源代码。至少对于Linux来说,有一个通用的IRQ处理层,驱动程序可以根据这个层进行编写,这样驱动程序就可以在架构之间兼容,而与底层中断架构无关。

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

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

有很多细节太详细,不能在这里发布,所以我建议获取Linux源码的副本并深入研究。如果你正在寻找映射,请特别注意不同的{{1目录。

如果你从顶层开始arch,你会得到一个make htmldocs,你可以仔细阅读。请查看Documentation/DocBook/index.html部分以获取更多详细信息。

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