晚安,
我正在尝试为共享 IRQ 线路编写一些 IRQ 处理程序。
本质上我只需要从设备内存中读取一些内存字即可。
为此,我使用
mem = ioremap_nocache(addr, 8);
(我只需要 8 个字节)。然后从处理程序调用。
irqreturn_t do_sample_irq() {
int val;
val = ioread32(mem); // I know this is only 4 Bytes, but it is ok.
printk(KERN_INFO, "%k\n.");
return (irqreturn_t) IRQ_HANDLED;
}
irqreturn_t sample_irq_handler() {
irqreturn_t ret;
spin_lock_irq(&lock);
ret = do_sample_irq();
spin_unlock_irq(&lock);
return ret;
}
然后,每当我插入模块时,都会立即出现内核恐慌:内核不同步:致命异常中断上下文。
我的猜测是我没有使用正确的同步技术,但我无法设计什么(开发内核模块任务中的新功能)。
发生了什么事?