我正在使用线程irq实现一个中断处理模块。我正面临着这个错误:
1983.150961] Shut down eMMC app module init.
[ 1983.151115] genirq: Flags mismatch irq 49. 00000004 (eMMC_power_shutdown_irq_
handler) vs. 00000004 (xuartps)
fio@uz3cg-dgw:~$ (edited) 在本例中,我选择的标志是#define IRQ0x00000004并分配给IRQF_TRIGGER_HIGH编号49。
下面是我的代码:
static int __init shutdownemmc_module_init(void)
{
printk("Shut down eMMC app module init. ");
if (request_threaded_irq( IRQ_NO, //IRQ number
(void *) emmc_irq_handler, //IRQ handler (Top half)
emmc_interrupt_thread_fn, //IRQ Thread handler (Bottom half).When the handler function returns IRQ_WAKE_THREAD
IRQF_TRIGGER_HIGH, //Handler will be called in raising edge
"eMMC_power_shutdown_irq_handler", //used to identify the device name using this IRQ
(void *)(emmc_irq_handler))) //device id for shared IRQ
{
pr_err("Cannot register IRQ ");
pr_err(" EIO %d , EINVAL %d\n", EIO, EINVAL);
return 0;
}
pr_info("Interrupt handler...Done!!!\n");
return 0;
}谁能解释一下什么是标志不匹配irq问题,以及我如何解决这个问题?谢谢你,Anh
发布于 2021-11-04 17:09:23
这是因为"xuartps“已经请求了IRQ号,并没有请求共享它。
摘自“__setup_irq() /irq/manage.c”中的内核:
/*
* If nobody did set the configuration before, inherit
* the one provided by the requester.
*/
if (irqd_trigger_type_was_set(&desc->irq_data)) {
oldtype = irqd_get_trigger_type(&desc->irq_data);
} else {
oldtype = new->flags & IRQF_TRIGGER_MASK;
irqd_set_trigger_type(&desc->irq_data, oldtype);
}
if (!((old->flags & new->flags) & IRQF_SHARED) ||
(oldtype != (new->flags & IRQF_TRIGGER_MASK)) ||
((old->flags ^ new->flags) & IRQF_ONESHOT))
goto mismatch;在上面的代码中,old是由"xuartps“设置的现有处理程序。new是由您的代码设置的新处理程序。为了共享IRQ,上面的条件之一是旧的和新的处理程序都需要请求带有IRQF_SHARED标志的IRQ。然而,驱动程序应该只在底层中断被认为是可共享的情况下设置IRQF_SHARED;例如:所有PCI中断都是可共享的,并且PCI设备的驱动程序应该使用IRQF_SHARED设置来请求中断。
mismatch:
if (!(new->flags & IRQF_PROBE_SHARED)) {
pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
irq, new->flags, new->name, old->flags, old->name);
#ifdef CONFIG_DEBUG_SHIRQ
dump_stack();
#endif
}
ret = -EBUSY;上面是将“标志不匹配”消息打印到内核日志的地方。
如果您不希望IRQ已经被请求,请检查您请求的IRQ是否正确。
https://stackoverflow.com/questions/69835676
复制相似问题