天天看點

使用gdb調試linux核心

使用Gdb+qemu調試核心:

我們調試核心需要一個叫qemu的虛拟機,qemu虛拟的一個好處便是可以讓cpu處于當機狀态,進而讓作業系統處于暫停狀态,這樣我們才能很友善的調試核心。首先使用qemu安裝一個作業系統,再将該作業系統的核心換成我們要調試的。

安裝qemu:

在ubuntu10.10下用# sudo apt-get install qemu下載下傳最新的qemu版本

從已經裝好的作業系統ubuntu9.10_32.img的硬碟啟動,測試qemu是否可以運作:

# qemu –hadubuntu9.10_32.img

使用gdb調試linux核心

基本安裝結束後,開始進入調試階段:

http://www.kernel.org/pub/linux/kernel/v2.6/

下載下傳linux2.6核心,本實驗使用編譯的核心為linux2.6.30

# cd/Downloads

#wget 

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2

# tar –jxvf  linux2.6.30.tar.bz2

# cdlinux-2.6.30

下面我們需要編譯自己的核心,産生image檔案bzImage和核心ELF檔案vmlinux,具體的編譯過程參考技術部落格:

http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

# make menuconfig

# make

編譯後會在./arch/x86/boot/ 下生成bzImage檔案:

注:編譯時間很長,由于我沒有對核心進行裁剪,以後編譯時可以參考:

http://lamp.linux.gov.cn/Linux/kernel_options.html

來對配置檔案進行裁剪,對不需要的子產品要進行裁剪,可以采用先剪裁幾個子產品後進行編譯,沒有錯誤後再進行裁剪編譯,最大程度上上保持核心配置的正确性,在這方面必須要加強,不能拿來個核心全都編譯,這樣時間和空間都是種浪費。

使用gdb調試linux核心

運作qemu,啟動調試模式:

# qemu –S–kernel arch/x86/boot/bzImage –had ubuntu9.10_32.img –append “root=dev/had”

使用gdb調試linux核心

在指令中使用S參數,是freeze CPU ata startup。

系統跳出一個黑顯示界面,無任何内容,此時通過ctrl+alt+1與ctrl+alt+2可以切換,ctrl+alt+2是qemu控制台,ctrl+alt+1是螢幕輸出。

現在我切換到qemu控制台(ctrl+alt+2)

(qemu)gdbserver 1234

使用gdb調試linux核心

此時需要另打開一個終端,進入linux2.6.30源碼目錄下:

# gdbvmlinux

(gdb)target remote localhost:1234

使用gdb調試linux核心

這時就可以正常使用gdb編譯核心了

設定斷點break start_kernel,停在linux核心的第一個c程式之上:

使用gdb調試linux核心
使用gdb調試linux核心
使用gdb調試linux核心
使用gdb調試linux核心
使用gdb調試linux核心

繼續閱讀