2013-01-09 8 views
12

Es scheint ein Problem mit dem Freedos Bootloader zu geben. (Es scheint, dass der Bootcode unter bestimmten Umständen den Kernel nicht finden kann.)Bootloader debuggen mit gdb in qemu

Also versuche ich den Bootloader in qemu mit gdb zu debuggen. Im Anschluss an den auf mehrere Wiki gefunden Anweisungen und frei verfügbaren Online-Kurs Materialien, ich laufe qemu wie diese

qemu-system-i386 -fda fdboot.img -boot a -s -S 

Und dann gdb verbinden wie diese

$ gdb 
(gdb) target remote localhost:1234 

ich durch die ersten Schritt 10 kann - mit 12 Anweisungen si was ich nehme ist das SeaBIOS.

Aber nachdem ich versucht habe, in den Bootloader-Code zu wechseln, wird die Ausführung ohne Unterbrechung fortgesetzt, bis zur FreeDos-Menüaufforderung. Dies überspringt den Bootloader-Code vollständig, den ich Schritt für Schritt untersuchen möchte, während er ausgeführt wird.

Was muss ich tun, damit ich den Bootloader durchstarten kann?

[Sie können die freedos Disketten-Images von der Projekt-Website herunterladen, wenn Sie sich selbst ausprobieren möchten.]

+0

Alternativvorschlag: BOCHS verfügt über einen integrierten Debugger, mit dem Sie einen Bootsektor in einem Schritt ausführen können. –

Antwort

10

Werke hier fein Qemu 1.3 und GDB 7.3.50.20111117 (Sie hat nicht gesagt, welche Versionen Sie verwendet) unter Verwendung von . Ich war zu Schritt Tonnen Anweisungen der Lage, bis ich langweilig wurde und legte einen Haltepunkt, den Bootloader zu fangen:

(gdb) br *0x7c00 
Breakpoint 1 at 0x7c00 
(gdb) c 
Continuing. 

Breakpoint 1, 0x00007c00 in ??() 
(gdb) x/i $eip 
=> 0x7c00:  jmp 0x7c3e 

Bitte beachte, dass ich GDB auf 16-Bit-Modus ersten set architecture i8086 mit eingestellt habe.

+0

Ich benutze gdb 7.5-ubuntu und qemu 1.2.0 (qemu-kvm-1.2.0 + noroms-0ubuntu2, Debian). Ja, ich habe versucht, bei * 0x7c00 Breakpointing zu machen, aber es scheint einfach über diese Adresse hinauszugehen, niemals zu brechen und das interaktive Menü von Freedos zu erreichen. Ich habe auch versucht, die Architektur auf i8086 einzustellen, ohne Unterschied. Ich werde versuchen, qemu und gdb aus trunk/head zu kompilieren, um zu sehen, ob es einen Unterschied macht. – rhlee

+0

Ja, ich kompiliere qemu von HEAD und ich kann jetzt erfolgreich alle Anweisungen durchgehen. – rhlee

+0

Was meinst du kompilieren qemu von HEAD? Das habe ich noch nie gehört. Ich habe das gleiche Problem, aber ich weiß nicht, was Kompilieren von HEAD bedeutet. Pflege um zu erarbeiten? :) – Rob

Verwandte Themen