从内核模块写入物理内存

在内核模块中,我需要通过向物理内存的地址写入“0”来处理中断。

首先,我应该通过像“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 handledn");

    return IRQ_HANDLED;
}

但是,当中断发生时,内核崩溃,中断处理程序开始处理它(内核BUG在mm / vmalloc.c:numberofline)

看来我的ioremap的使用有问题,或者我应该使用另一个“mmap的内核替代品”

请告诉我,如何解决这个问题?


直接从Linux ioremap.c

如果你映射和映射一个区域,其他CPU将不会看到这个变化,直到他们的下一个上下文切换。 与此同时,(例如)如果其他CPU中的一个需要引用新的ioremap'd区域,则CPU将引用旧区域。

这严格要求在中断服务程序中避免ioremap调用。

链接地址: http://www.djcxy.com/p/12125.html

上一篇: Write to physical memory from kernel module

下一篇: Determine if an element in an iframe is visible on the screen