Im Kernelmodul muss ich den Interrupt behandeln, indem ich eine "Null" an die Adresse des physischen Speichers schreibe.C - Vom Kernelmodul in den physischen Speicher schreiben
Zunächst sollte ich einen Speicher durch eine Funktion wie "mmap" zuweisen, aber für Kernel-Modul; zum Beispiel, 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;
}
jedoch die Kernel-Abstürze beim Interrupt kommt und Interrupt-Handler Behandlung beginnt es (Kernel-Fehler in mm/vmalloc.c: numberofline)
Es scheint, dass etwas falsch mit meiner Nutzung von ioremap oder Ich sollte einen anderen "Kernel-Ersatz von mmap" verwenden
Bitte sagen Sie mir, wie um dieses Problem zu umgehen?
Haben Sie versucht, den 'ioremap'-Aufruf außerhalb des Interrupts auszuführen? Z.B. im Modul Initialisierungscode? –
@JoachimPileborg der gleiche Code funktioniert gut in Modul init! O_O Ich benötige diesen Code jedoch am Interrupt-Handler –
Bewegt sich das Gerät im physikalischen Adressraum ??? –