1. 程式人生 > >Vmware+gdb調試Linux內核——工欲善其事,必先利其器

Vmware+gdb調試Linux內核——工欲善其事,必先利其器

image rod font 介紹 執行 make group 進行 小技巧

今天我最終忍受不了qemu的低速跟不可理喻的各種bug,開始尋找新的調試內核的方法。然後想到了Vmware,那麽成熟的虛擬機怎麽可能調試不了內核。於是嘗試了一番,發現結果很的棒!所以立刻奮筆疾書。把這種方法記錄下來。

我們這裏主要分成幾個步驟:

1、vmware和linux的安裝

2、vmware編譯Linux內核

3、vmware和gdb主機的配置

4、測試


一、vmware和linux的安裝

1)VMware for Linux的安裝

官網下載地址:

https://my.vmware.com/web/vmware/details?downloadGroup=WKST-1002-LX&productId=362&rPId=5404

註:官網下載須要進行註冊在太平洋等站點能夠找到,但因為csdn博客url限制問題不能列出。

下載完畢之後。chmod a+x filename。然後在終端./filename執行安裝程序。接下來和win下的安裝基本一樣,這裏不作具體介紹。

2)Linux虛擬機的安裝

安裝完vmware之後,我們在虛擬機上安裝Linux系統。

並在接下來的(二)中。在Linux虛擬機上編譯新的內核。

這裏的安裝和物理機安裝基本事一樣的。可是有點小技巧。由於我們接下來須要在Linux虛擬機上編譯內核,所以這裏建議安裝Development,由於編譯的時候不僅須要make還需有其它庫的支持。我相信沒有願意在虛擬機裏面再配一次yum源的。

所以我們在創建虛擬機的時候,須要選擇創建之後安裝系統:

技術分享

虛擬機創建完畢後,通過虛擬機的setting屬性。設置光盤掛載鏡像:

技術分享

然後啟動虛擬機。就能夠進行安裝。


二、vmware編譯Linux內核

1)共享目錄的制作

首先選擇右鍵中的install vmware tool,將自己主動把vmware tool的安裝文件掛載到光盤。我們把裏面的.tar.gz

文件拿出來。解壓而且運行裏面的安裝文件。一路enter就ok了

然後我們在setting中繼續例如以下的設置:

技術分享

上圖的意思是虛擬機中/mnt/hgfs/HostFile 文件相應主機中/home/sleipnir/Documents文件實現共享

2)內核編譯

內核下載:www.kernel.org

我的版本號是2.6.32.62。

不同的版本號編譯的方法事有一些差異的。比方2.6.32.61須要改動arch/x86/include/asm/ptrace.h的代碼。不然編譯會報錯。下載下來之後,我們進行解壓,然後利用menuconfig進行模塊的選擇,最後編譯。詳細的命令行例如以下:

tar xvf kernel-file.tar.gz //解壓

cd kernel-file

make menuconfig //利用menuconfig進行模塊定義,詳細在前面幾篇文章中進行了介紹

make -j4 all //編譯-j4是使用多線程編譯,假設散熱不好的機子不建議使用。

過熱會導致重新啟動

make bzImage //壓縮內核

make modules //編譯模塊

make modules_install //安裝模塊

make install //安裝內核

註意:make install的時候。假設報錯ERROR:modinfo:could not find module XXXX能夠不用管。reboot之後新內核能夠正常執行。至於原理我們這裏提供一篇文章進行解釋:


三、vmware和gdb主機的配置

完畢了上面步驟之後,我們須要對虛擬機做2步配置

1)將虛擬機上內核的編譯目錄復制到主機的同樣路徑以下。比方虛擬機上的編譯文件在/usr/kernel/linux-2.6.32.62。

那這裏我們須要在主機的同樣路經中把linux-2.6.32.62拷貝過來。拷貝的方法能夠利用上面的共享目錄。

2)在主機上。配置vmware虛擬機的配置文件。配置文件在虛擬機的安裝目錄中,以.vmx後綴結尾。

往後面加入debugStub.listen.guest32="1"。假設是64位的機器就改成debugStub.listen.guest64="1"


四、測試

1)在主機上打開Vmware(註:臨時不須要打開虛擬機)

2)在主機上,進入到內核編譯目錄(剛剛從虛擬機拷貝過來的)

3)gdb進入調試模式

4)(gdb)file vmlinux

(gdb)target remote localhost:8832(註:這裏假設事64位機器則是8864port)

然後打開虛擬機

效果例如以下:

技術分享

5)(gdb)b start_kernel

(gdb)c

效果例如以下:

技術分享


Vmware+gdb調試Linux內核——工欲善其事,必先利其器