歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> 用Qemu調試linux內核

用Qemu調試linux內核

日期:2017/2/25 10:37:52   编辑:Linux內核
 Qemu是一個優秀的開源ISA模擬器,支持很多體系結構,當然包括x86。Qemu提供調試功能,可以對被模擬進行調試。

  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程序之上。

Copyright © Linux教程網 All Rights Reserved