2013-01-09 22 views
12

Sembra esserci un problema con il bootloader di Freedos. (Sembra che il codice di avvio non trovi il kernel in determinate circostanze.)Debug di bootloader con gdb in qemu

Quindi sto provando a eseguire il debug del bootloader in qemu con gdb. Seguendo le istruzioni trovate su diversi wiki e materiale didattico on-line liberamente disponibili, corro QEMU come questo

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

e poi collegare gdb come questo

$ gdb 
(gdb) target remote localhost:1234 

posso passare in rassegna i primi 10 - 12 le istruzioni con si che presumo sia il SeaBIOS.

Ma oltre a ciò, quando provo ad accedere al codice del bootloader, continua l'esecuzione senza interruzioni fino al prompt del menu di FreeDos. Questo salta totalmente il codice del bootloader che vorrei esaminare passo dopo passo mentre viene eseguito.

Cosa devo fare per eseguire il bootloader?

[È possibile scaricare il FreeDOS immagini dei dischetti dal sito web del progetto, se volete provare voi stessi.]

+0

Suggerimento alternativo: BOCHS dispone di un debugger incorporato che consente di eseguire un singolo passaggio in un settore di avvio. –

risposta

10

funziona bene qui utilizzando qemu 1.3 e gdb 7.3.50.20111117 (non hai detto quello che hai usato le versioni) . ho potuto singoli tonnellate passo di istruzioni fino a quando mi sono stufato e posto un punto di interruzione per prendere il bootloader:

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

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

Nota che ho impostato gdb alla modalità a 16 bit prima utilizzando set architecture i8086.

+0

Sto usando gdb 7.5-ubuntu e qemu 1.2.0 (qemu-kvm-1.2.0 + noroms-0ubuntu2, Debian). Sì, ho provato l'interruzione a * 0x7c00, ma sembra che passi oltre quell'indirizzo, non si rompa mai, raggiungendo il menu interattivo di Freedos. Ho anche provato a impostare l'architettura su i8086, senza alcuna differenza. Cercherò di compilare qemu e gdb dal tronco/testa per vedere se fa alcuna differenza. – rhlee

+0

Sì, compilo qemu da HEAD e ora posso eseguire con successo tutte le istruzioni. – rhlee

+0

Cosa intendi per compilare qemu da HEAD? Non l'ho mai sentito prima. Ho lo stesso problema ma non so cosa compili da HEAD. Cura di elaborare? :) – Rob