カーネルモジュールでは、物理メモリのアドレスに「ゼロ」を書き込んで割り込みを処理する必要があります。
まず、「mmap」のような関数でメモリを割り当てる必要がありますが、カーネルモジュール用です。たとえば、ioremap。
static irqreturn_t int068_interrupt(int irq, void *dev_id)
{
unsigned int *p;
unsigned int address;
unsigned int memsize;
address = 0x12345678;
memsize = 1024;
p = ioremap(address, memsize);
p[0]=0;
printk("Interrupt was handled\n");
return IRQ_HANDLED;
}
ただし、割り込みが発生し、割り込みハンドラーがカーネルの処理を開始すると、カーネルがクラッシュします(mm / vmalloc.c:numberoflineのカーネルバグ)
ioremapの使用法に問題があるようです。または、別の「mmapのカーネル代替」を使用する必要があります。
この問題を回避する方法を教えてください。