在内核模块中,我需要通过向物理内存地址写入“零”来处理中断。
首先,我应该通过像“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 的内核替代品”
请告诉我,如何解决这个问题?