Lowlevel
Lowlevel => Das Wiki => Thema gestartet von: Martin Erhardt am 06. July 2012, 16:10
-
Wenn ich den http://www.lowlevel.eu/wiki/Teil_5_-_Interrupts (http://www.lowlevel.eu/wiki/Teil_5_-_Interrupts) beispielkernel kompiliere und auf qemu laufen lasse bekomme ich ein paar Taktzyklen(25) nach dem GDT und IDT init einen Exception 13 General Protection Fault. Auf Virtual box läuft alles bestens.
...
Wieso? :?
Ich weiß leider nicht wo die qemu logdatei liegt.
-
Vermutlich hast du einen Fehler gemacht. ;)
Interessant wäre zunächst einmal, ob der #GP ausgelöst wird, weil ein Hardware-Interrupt auftritt (z.B. Timer) oder ob dein Code schuld ist. Wenn du qemu mit -d int aufrufst, wird jeder Interrupt mitsamt CPU-Status zu diesem Zeitpunkt mitgeloggt (normal in /tmp/qemu.log). Auf jeden Fall solltest du dort den #GP sehen (v=0d). Der zugehörige Fehlercode (e=...) verrät in der Regel schonmal einiges. Ansonsten ist auch eip interessant, also die Instruktion, an der die Exception ausgelöst worden ist.
-
Vermutlich hast du einen Fehler gemacht. ;)
Interessant wäre zunächst einmal, ob der #GP ausgelöst wird, weil ein Hardware-Interrupt auftritt (z.B. Timer) oder ob dein Code schuld ist. Wenn du qemu mit -d int aufrufst, wird jeder Interrupt mitsamt CPU-Status zu diesem Zeitpunkt mitgeloggt (normal in /tmp/qemu.log). Auf jeden Fall solltest du dort den #GP sehen (v=0d). Der zugehörige Fehlercode (e=...) verrät in der Regel schonmal einiges. Ansonsten ist auch eip interessant, also die Instruktion, an der die Exception ausgelöst worden ist.
mhm Eine datei qemu.log wird dann angelegt bleibt aber beim befehl "/usr/bin/qemu-system-x86_64 -cdrom /home/martin/Downloads/tutorial-28b2b4c/bootable.iso -d int" leer ich versuche jetzt ein floppy img zu nehmen.
-
Benutzt du eventuell in Wirklichkeit ein qemu-kvm? Wenn ja, versuche es mal mit -no-kvm, KVM loggt diese ganzen Informationen leider nicht mit.
-
Vielen Dank nicht nur das alles geloggt wird auch der Exception ist weg :-D
-
Hm, gut, so war das eigentlich nicht gedacht, aber dir kann's ja recht sein... :-D
Bei Gelegenheit muss ich mir das vielleicht mal näher anschauen. Mit meinem installierten qemu-kvm bekomme ich auch den #GP, interessanterweise aber mit meinem "normalen" qemu (relativ aktuelle git-Version) auch mit -enable-kvm nicht.
-
Ich bekomme den Exception auch nicht mehr mit dem parameter -no-kvm-irqchip. Offenbar ist das Problem lediglich, dass qemu diesen irq chip simuliert. Der bei dir anscheinend standardmäßig von qemu emuliert wird.
-
Interessant. Theoretisch sollte das keinen Unterschied machen, das ist also entweder ein Bug im Kernel-PIC oder im Userspace-PIC.