在三星s3c2440的板子上,利用gpio模拟一个设备,在给这个设备注册中断的时候碰到了问题。问题出在request_irq()上,经测试发现,错误是-22,查看《Linux程序设计》(第三版),发现这个错误是-EINVAL,在网上查这个EINTVAL,发现了这么个网址:,里面指出了这个宏的定义还有在内核包里的位置。出现了-EINVAL的错误就意味着申请的irq越界了,由于我申请的irq是IRQ_EINT3,在内核包中定义的位置是:kernel-2.6.13/include\asm-arm/arch-s3c2410/irqs.h ,经过分析,这个中断号是19。在终端中用cat /proc/interrupts查看,没有19号中断,那为什么没有申请成功呢?
想到我注册的是共享的中断,前提是中断线还没有被注册成快速中断,从interrupts中看到显然还没有,那就是别的什么原因,查了资料发现要注册成共享的,参数中的dev_id不能为null,实践了一下果然如此。
阅读(2256) | 评论(0) | 转发(0) |