Qemu主頁http://fabrice.bellard.free.fr/qemu/
Qemu下載頁面http://fabrice.bellard.free.fr/qemu/download.html 包括源碼,可執行文件,已制作好的disk file等
Qemu有使用說明文檔http://fabrice.bellard.free.fr/qemu/qemu-doc.html,網上也可以搜索到一些說明,但是這些說明不夠清楚甚至有錯誤的地方,不足以幫助別人成功使用Qemu來調試kernel,所以我把自身可行的方法記錄下來。
1。下載Qemu, qemu有直接的可執行文件包,解壓到 / 即可使用
2。下載Qemu 提供的測試disk image file;
3。測試Qemu是否可以運行, qemu -hda linux-0.2.img -append "root=/dev/hda"
-no-kqemu(linux-0.2.img為之前下載好的disk image file),正常情況下會跳出窗口開始運行linux系統
基本安裝正確之後,開始進入調試階段
1。編譯自己需要的kernel內核,產生image文件bzImage,kernel elf文件vmlinuz
2。運行Qemu,啟動調試模式。這裡是需要注意的地方,Qemu給出的說明是這樣的:
In order to use gdb, launch qemu with the '-s' option. It will wait for a gdb connection:
> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \
-append "root=/dev/hda"
Connected to host network interface: tun0
Waiting gdb connection on port 1234
很多網上資料也是這麼說的,但是我試了多次,使用這樣的命令,不會出現“Connected to host network interface: tun0 Waiting gdb connection on port 1234”字樣,linux系統也是直接運行起來,沒有調試的機會。一個個們告訴我用-S(大S)就能達到效果。 -S 的意思是freeze CPU ata startup。
步驟如下
1。啟動Qemu,使用大S參數 qemu -kernel bzImage -hda linux-0.2.img -append "root=/dev/hda" -S,系統會跳出一個黑顯示界面,無任何內容。此時通過 ctrl+alt+1 與 ctrl+alt+2可以切換,一個是屏幕輸出,一個是qemu控制台。
2。切換到qemu控制台,輸入命令gdbserver 1234
3。同時打開gdb程序,通過qemu說明中提供的方法既可進行調試:
Then launch gdb on the 'vmlinux' executable:
> gdb vmlinux
In gdb, connect to QEMU:
(gdb) target remote localhost:1234
你可以設置斷點如break start_kernel,停在linux內核的第一個c程序之上。