irq_to_desc函数失败,IRQ号为

时间:2017-06-21 16:54:43

标签: linux-kernel linux-device-driver

我正在尝试为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。

感谢。

1 个答案:

答案 0 :(得分:0)

如果相应的IRQ编号未映射到任何已分配的IRQ描述符,则对irq_to_desc()的调用可能会失败。如果启用了CONFIG_SPARSE_IRQ内核配置,则IRQ描述符存储在基数树中。否则,IRQ号和描述符之间存在直接转换。

通常在注册中断控制器驱动程序时分配IRQ描述符。您可以参考中断控制器的数据表或您正在使用的平台的数据表。

您可以检查IRQ 43是否对您的中断控制器有效。可以从设备的设备树节点中找到中断控制器信息(在设备树节点中查找interrupt-parent)。

希望这有帮助。