我正在尝试为IRQ第43行安装IRQ处理程序,如下所示:
ret2 = request_irq(irq_no, handle_interrupt, IRQF_SHARED, DEVICE_NAME, &pdev->dev);
但是我继续使用-22这是INVALID输入使rquest_irq失败。在查看内核代码之后,我可以看到函数request_threaded_irq()在以下点返回-EINVAL:
desc = irq_to_desc(irq);
if (!desc) {
printk(KERN_EMERG "%s:%d\n", __func__, __LINE__);
return -EINVAL;
}
任何人都可以帮我理解irq_to_desc()函数返回NULL的原因是什么? 我在mips机器中使用内核版本4.11。
感谢。
答案 0 :(得分:0)
如果相应的IRQ编号未映射到任何已分配的IRQ描述符,则对irq_to_desc()
的调用可能会失败。如果启用了CONFIG_SPARSE_IRQ
内核配置,则IRQ描述符存储在基数树中。否则,IRQ号和描述符之间存在直接转换。
通常在注册中断控制器驱动程序时分配IRQ描述符。您可以参考中断控制器的数据表或您正在使用的平台的数据表。
您可以检查IRQ 43是否对您的中断控制器有效。可以从设备的设备树节点中找到中断控制器信息(在设备树节点中查找interrupt-parent
)。
希望这有帮助。