Lowlevel

Lowlevel => Das Wiki => Thema gestartet von: Martin Erhardt am 06. July 2012, 16:10

Titel: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag 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.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: kevin am 06. July 2012, 16:35
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.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: Martin Erhardt am 06. July 2012, 17:00
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.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: kevin am 06. July 2012, 19:14
Benutzt du eventuell in Wirklichkeit ein qemu-kvm? Wenn ja, versuche es mal mit -no-kvm, KVM loggt diese ganzen Informationen leider nicht mit.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: Martin Erhardt am 06. July 2012, 22:05
Vielen Dank nicht nur das alles geloggt wird auch der Exception ist weg  :-D
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: kevin am 06. July 2012, 23:56
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.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: Martin Erhardt am 10. July 2012, 19:21
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.
Titel: Re: GPF bei allen interrupt beispielkerneln aus osdev tutorial reihe auf QEMU
Beitrag von: kevin am 10. July 2012, 21:59
Interessant. Theoretisch sollte das keinen Unterschied machen, das ist also entweder ein Bug im Kernel-PIC oder im Userspace-PIC.