微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

据我所知,在Windows系统中有255个虚拟IRQ(芯片组只允许16个物理)并且它们通常都使用物理IRQ 11.在Linux系统中还有一个虚拟IRQ的概念.所以,我很感兴趣这是怎么回事映射实现?来自Linux内核或只是算法的Sourse代码示例将不胜感激.

解决方法:

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

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

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

有很多细节太详细,不能在这里发布,因此我建议获取Linux源代码的副本并深入研究.如果您正在寻找映射,请特别查看不同的arch目录.

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐