zynq上定义了一个gpio用作dipsw输入,并且带有中断。
运用到DTS,在systom-top.dts中是这样描述中断信息的。
interrupt-parent = <&intc>;
interrupts = <0 29 4>;
驱动中:
irqNumber = platform_get_resource(pdev, IORESOURCE_IRQ, 1);
if (!irqNumber) {
printk("no IRQ found\n");
return -1;
}
printk("irqNumber = %d\n",irqNumber->start);
ccddev->irq = irqNumber->start;
printk("ccddev->irq = %d\n",ccddev->irq);
//这边从DTS得到的中断号是 164=irqNumber->start
//init irq
result = request_irq(a,
(irq_handler_t) ebbgpio_irq_handler,
0,
DRIVER_NAME,
ccddev);
printk(KERN_INFO "GPIO_TEST: The interrupt request result is: %d\n", result);
//request_irq 的返回值一直为-22
我的内核版本是Linux version 4.6.0-xilinx。
你的意思是,有的内核可以执行成功?
我知道的是request_irq的第三个参数对于不同的内核是不一样的。