我正在为在 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 分配给驱动程序。问题是,当中断发出时,中断处理程序没有得到执行。
任何想法?我错过了什么?
非常感谢!