Abh*_*itG 13 linux linux-device-driver linux-kernel
我试图理解以下消息的含义:
irq N:nobody cared (try booting with the "irqpoll" option)
Run Code Online (Sandbox Code Playgroud)
这是否意味着即使已经获得中断,IRQ处理程序也不处理响应?或者调度程序无法调用irq处理程序?
在什么条件下发生这种情况?
理想情况下,上面的消息后面应该跟一个堆栈跟踪,它可以帮助您确定导致问题的子系统.此消息表示中断处理程序由于开销而卡住,并且没有返回,从而导致系统禁用IRQ#X. 这可以在有缺陷的固件的情况下看到.
该irqpoll选项需要添加到grub.conf中,这意味着,当未处理中断时,搜索所有已知的中断处理程序以获取相应的处理程序,并检查每个计时器中断的所有处理程序.这有时对于运行固件损坏的系统很有用.grub.conf中的内核命令行应如下所示:
kernel/vmlinuz-version ro root =/dev/sda1 quiet irqpoll
最小可运行 QEMU 示例
QEMU 有一个教育设备,称为edu生成中断,非常适合探索这一点。
首先,我为它创建了一个最小的 Linux PCI 设备驱动程序,它可以正确处理中断。
现在我们可以通过注释掉request_irq和free_irq从代码中轻松生成错误。
然后,如果我们运行生成 IRQ 的用户态程序,我们会得到:
irq 11: nobody cared (try booting with the "irqpoll" option)
Run Code Online (Sandbox Code Playgroud)
其次是堆栈跟踪。
正如其他人所提到的:未处理的 IRQ。
| 归档时间: |
|
| 查看次数: |
23682 次 |
| 最近记录: |