2013-01-09 93 views
12

Freedos引導程序似乎存在問題。 (看起來bootcode在某些情況下找不到內核。)在qemu中使用gdb調試引導程序

所以我想用gdb在qemu中調試bootloader。以下幾個wiki和在線免費提供課程材料中的說明,我跑QEMU這樣

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

然後連接GDB這樣

$ gdb 
(gdb) target remote localhost:1234 

我可以通過前10個步驟 - 與12條指令我認爲這是SeaBIOS的si

但是過去,當我嘗試進入引導加載程序代碼時,它會繼續執行而不會中斷,一直到FreeDos菜單提示。這完全跳過了Bootloader代碼,我想逐步檢查它的執行情況。

我需要做什麼以便我可以通過引導加載程序執行一些操作?

[您可以從項目網站下載FreeDOS的軟盤鏡像,如果你想嘗試自己。]

+0

其他建議:BOCHS有一個內置的調試器,可以讓您單步引導扇區。 –

回答

10

做工精細這裏使用QEMU 1.3和gdb 7.3.50.20111117(你沒有說你使用什麼版本) 。 我能夠單步萬噸的指示,直到我覺得無聊,並放置一個斷點趕引導程序:

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

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

請注意,我已經設置GDB以16位模式下首先使用set architecture i8086

+0

我使用gdb 7.5-ubuntu和qemu 1.2.0(qemu-kvm-1.2.0 + noroms-0ubuntu2,Debian)。是的,我嘗試在* 0x7c00處突破,但它似乎超過了這個地址,從不中斷,達到Freedos的交互式菜單。我也嘗試將架構設置爲i8086,沒有任何區別。我會嘗試從trunk/head編譯qemu和gdb,看看它是否有任何區別。 – rhlee

+0

是的,我從HEAD編譯qemu,現在我可以順利完成所有的指示。 – rhlee

+0

你是什麼意思從HEAD編譯qemu?我從來沒有聽說過。我有這個相同的問題,但我不知道HEAD是什麼意思。謹慎闡述? :) – Rob