1

我正在为在 ARM 上运行的设备编写驱动程序。

这是 probe() 和 interrupt_handler() 的代码:

static irqreturn_t interrupt_handler(int irq, void *dev_id){
    printk(KERN_ALERT "MY_IRQ: Interrupt handler executed!\n");
    return IRQ_HANDLED;
}

static int mydevice_probe (struct platform_device *pdev) {
    printk("-----------------------------------------PROBE CALLED \n");
    r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    if(r == NULL) {
        printk("platform_get_resource failed\n");
        return -ENODEV;
    }
    irq = platform_get_irq(pdev,0);
    if (irq < 0) {
        printk("platform_get_irq failed\n");
        return -ENODEV;
    }

    ret = request_irq(irq, interrupt_handler, IRQF_SHARED, pdev->name, &dev_num);
    ret = misc_register(&mydevice_miscdevice);
    return 0;
}

request_irq成功返回 0 并将 IRQ #17 分配给驱动程序。问题是,当中断发出时,中断处理程序没有得到执行。

任何想法?我错过了什么?

非常感谢!

4

1 回答 1

2

首先,一个良好实践的问题 - 呼吁request_irqmisc_register应该受到if条款的保护printkreturn -EIO失败。

也许您没有启用中断。您可能应该添加代码以清除,然后在调用request_irq.

于 2013-04-12T04:58:53.370 回答