我试图为IRQ第43行安装IRQ处理程序,如下所示:
ret2 = request_irq(irq_no, handle_interrupt, IRQF_SHARED, DEVICE_NAME, &pdev->dev);但是我继续让rquest_irq失败-22,这是无效的输入。在查看内核代码之后,我可以看到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。
谢谢。
发布于 2017-06-22 14:56:59
如果没有将相应的IRQ编号映射到任何已分配的IRQ描述符,则对irq_to_desc()的调用可能失败。如果启用了CONFIG_SPARSE_IRQ内核配置,IRQ描述符将存储在基树中。否则,IRQ数和描述符之间就有直接的转换。
在注册中断控制器驱动程序时,通常会分配IRQ描述符。您可以引用中断控制器的数据表或正在使用的平台的数据表。
您可以检查IRQ 43对您的中断控制器是否有效。中断控制器信息可以从设备的设备树节点中找到(在设备树节点中查找interrupt-parent )。
希望这能有所帮助。
https://stackoverflow.com/questions/44682022
复制相似问题