You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在QEMU中启用MSI后中断处理器未触发,求排查方案

自制OS中xHCI MSI中断无法触发的问题排查

背景

我正在跟随日文版《ゼロからのOS自作入門》开发自制OS,参考该书配套源码实现(但我用Rust替代C++,部分细节有差异)。目前已完成USB键鼠的xHCI驱动,主程序通过无限轮询事件环前端捕获设备事件TRBs。下一步计划在PCI接口启用MSI中断以替代轮询机制,在QEMU中使用-device nec-usb-xhci选项(因-device qemu-xhci仅支持MSI-X,不支持MSI)。我严格按照书籍说明操作:向PCI配置空间写入对应数据、添加处理队列事件的中断处理器、加载IDT,但中断处理器始终未执行。

调试尝试与结果

我通过QEMU的-trace "pci_cfg_write"选项检查PCI配置空间的写入操作,得到以下输出:

pci_cfg_write nec-usb-xhci 04:0 @0x70 <- 0x890005
pci_cfg_write nec-usb-xhci 04:0 @0x74 <- 0xfee00000
pci_cfg_write nec-usb-xhci 04:0 @0x78 <- 0x0
pci_cfg_write nec-usb-xhci 04:0 @0x7c <- 0xc040

其中0x40是我选择的xHCI中断向量,同一时间仅接受一个中断。上述写入操作与书中的C++实现完全一致,但书中的实现能成功启用MSI,我的却不行。

另外,我尝试在主循环中插入int 0x40手动触发该中断,此时鼠标可正常移动,说明IDT配置正确、事件处理逻辑正常,仅MSI未自动触发中断。

问题

  • 可能导致该差异的原因是什么?
  • 如何正确激活MSI中断?

内容的提问来源于stack exchange,提问作者Paul Sohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:12:53