【发布时间】:2021-12-18 11:19:15
【问题描述】:
我正在使用线程 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 IRQF_TRIGGER_HIGH 0x00000004 并在这种情况下分配给 IRQ 号 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;
}
有人可以解释什么是 Flags mismatch irq 问题以及如何解决这个问题吗? 谢谢, 安赫
【问题讨论】:
标签: linux linux-kernel kernel interrupt interrupt-handling