Ole*_*rov 3 c linux windows kernel linux-kernel
据我所知,Windows系统中有255个虚拟IRQ(芯片组只允许16个物理),它们通常都使用物理IRQ 11.在Linux系统中,还有一个虚拟IRQ的概念.
所以,我很感兴趣如何实现这种映射?来自Linux内核或只是算法的Sourse代码示例将不胜感激.
中断处理的确切实现因架构和平台而异.这个答案主要针对Linux提供源代码.至少对于Linux来说,有一个通用的IRQ处理层,驱动程序可以根据这个层进行编写,这样驱动程序就可以在架构之间兼容,而与底层中断架构无关.
现代平台可能有多个中断控制器,因此它的平台特定代码处理请求的IRQ号request_irq()到特定中断控制器的映射.
以mach-pxaLinux为PXAxxx基础平台的架构为例.平台irq.c文件包含两个struct irq_chip引用,表示两个不同的中断控制器.当pxa_init_irq()被调用时,它分配一个虚拟中断数到特定的中断控制器.平台代码确保为每个可能的中断源分配唯一的中断号.
有很多细节太详细,不能在这里发布,因此我建议获取Linux源代码的副本并深入研究.如果您正在寻找映射,请特别查看不同的arch目录.
如果你make htmldocs从顶层做一个,你会得到一个Documentation/DocBook/index.html你可以仔细阅读的.请查看该genericirq部分以获取更多详细信息.
此外,Linux设备驱动程序,Corbet,Rubini,Kroah-Hartman书籍是一个很好的信息来源.
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |