设备驱动程序负责管理设备与操作系统之间的通信,如果驱动程序存在bug,就有可能导致请求中断失败。在这种情况下,需要对设备驱动程序进行调试和修复,以解决“requestirq fail”错误。 另外,硬件故障也可能引起“requestirq fail”错误。设备本身可能存在硬件问题,例如中断控制器损坏或中断线路有故障,这些问题都会导致请求中断...
// irq:请求的中断线// my_interrupt:中断处理程序// IRQF_SHARED:中断线可以共享// my_device:中断名字// my_dev:传递my_dev变量给dev形参。如果请求失败将直接返回if(request_irq(irqn,my_interrupt,IRQF_SHARED,"my_device",my_dev)) {return-EIO; } free_irq(释放中断) 释放相应的中断,注释掉相应的...
注意,request_irq()函数可能会睡眠,因此,不能在中断上下文或其他不允许阻塞的代码中调用该函数 天真地在睡眠不安全的上下文中调用request_irq()函数,是一种常见错误。造成这种错误的部分原因是为什么request_irq()函数会引起堵塞——这确实让人费解,见下面的睡眠情景 发生睡眠的情景:在注册的...
33 P_DEBUG("request irq failed!\n"); 34 return ret; 35 } 再加载一次,发现还是不行。 [root: /]# cd review_driver/6th_irq/6th_irq_2/2nd/ [root: 2nd]# insmod test.ko //加载第一个时就已经不行了 [test_init]request irq failed! insmod: cannot insert 'test.ko':invalid parameter /...
1.request_irq()位于kernel/irq/ manage .c,函数原型如下: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 参数说明: unsigned int irq:为要注册中断服务函数的中断号,比如外部中断0就是16,定义在mach/irqs.h ...
__setup_irq是用于设置和注册中断的核心函数,它是request_threaded_irq等函数的内部实现。 1.1. irqaction handler和thread_fn是struct irqaction的两个重要成员,由程序员指定或在__setup_irq中自动设置, 在中断发生后的处理函数被调用。 /// include/linux/interrupt.h /** * struct irqaction - per interrup...
试简述request_irq函数。相关知识点: 试题来源: 解析 答:Linux设备驱动程序通过调用request_irq函数来申请中断,从request_irq函数返回的值为0时,表示申请成功;负值表示出现错误。 该函数中的参数为: irq表示所要申请的硬件中断号。 handler为向系统登记的中断处理子程序,中断产生时由系统来调用,调用时所带参数irq为...
是该中断线被占用了,可能是其他设备占用的,把那个地方找到,把中断线释放掉就行了