返回值irqreturn_t,先看下面的定义 enum irqreturn { //中断处理程序检测到一个中断,但该中断对应的设备并不是在注册处理函数期间指定的产生源时,返回这个值 IRQ_NONE, //中断处理程序被正确调用且确实是它多对应的设备产生了中断,返回这个值 IRQ_HANDLED, IRQ_WAKE_THREAD, }; typedef enum irqreturn irqreturn_...
#define IRQ_NOAUTOEN 0x00080000 /* IRQ will not be enabled on request irq */ #define IRQ_WAKEUP 0x00100000 /* IRQ triggers system wakeup */ #define IRQ_MOVE_PENDING 0x00200000 /* need to re-target IRQ destination */ #define IRQ_NO_BALANCING 0x00400000 /* IRQ is excluded from balanc...
中断处理程序可能返回两个特殊的值:IRQ_NONE和IRQ_HANDLED 当中断处理程序检测到一个中断,但该中断对应的设备并不是在注册处理函数期间指定的产生源时,返回IRQ_NONE 当中断处理程序被正确调用, 且确实是它所对应的设备产生了中断时,返回IRQ_HANDLED 另外,也可以使用宏IRQ_ RETVAL(val): 如果val为...
不同的外部设备、不同的体系结构、不同的OS其中断实现机制都有差别,本文对应的OS为linux3.4版本,...
使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。 ...
if ((irqflags & IRQF_SHARED) && !dev_id) /* 使用共享中断但没有提供非NULL的dev_id则返回错误 */ return -EINVAL; if (irq >= NR_IRQS) /* 中断号超出最大值 */ return -EINVAL; if (irq_desc[irq].status & IRQ_NOREQUEST) /* 该中断号已被使用并且未共享 */ ...
int request_irq (unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name, void *dev_id);该函数有五个参数,具体含义如下:第一个参数irq,表示申请的硬件中断号。第二个参数handler,是一个函数指针,指向系统登记的中断处理函数,...
其中,irq是中断号,handler是中断处理程序的函数指针,flags是中断处理程序的标志,name是中断处理程序的名称,dev是中断处理程序的设备指针。 当我们调用request_irq函数时,它会向内核注册一个中断处理程序,并返回一个整数值。如果返回值为0,则表示注册成功;否则,表示注册失败。 在使用request_irq函数时,我们需要注意一些...
5.返回值 函数运行正常时返回0,否则返回对应错误的负值。 6.补充 如果不需要将中断线程化,一般使用以下函数即可: intrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar*name,void*dev); 查看源码可知,这个函数其实是request_threaded_irq的一个特例,源码如下: ...