Trong mô-đun hạt nhân, tôi cần xử lý ngắt bằng cách viết "số không" vào địa chỉ bộ nhớ vật lý.C - Ghi vào bộ nhớ vật lý từ mô-đun hạt nhân
Trước hết, tôi nên phân bổ bộ nhớ theo một số chức năng như "mmap", nhưng đối với mô-đun hạt nhân; ví dụ, 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;
}
Tuy nhiên, các tai nạn hạt nhân khi ngắt đến và gián đoạn xử lý bắt đầu xử lý nó (BUG hạt nhân tại mm/vmalloc.c: numberofline)
Dường như điều gì sai với việc sử dụng của tôi ioremap, hoặc Tôi nên sử dụng "thay thế hạt nhân khác của mmap"
Vui lòng cho tôi biết, cách khắc phục sự cố này?
Bạn đã thử thực hiện lệnh gọi 'ioremap' _outside_ ngắt? Ví dụ. trong mã khởi tạo mô-đun? –
@JoachimPileborg cùng một mã hoạt động tốt trong mô-đun init! O_O Tuy nhiên, tôi cần mã này tại trình xử lý ngắt –
Thiết bị có tiếp tục di chuyển trong không gian địa chỉ thực không ??? –