Vmware+gdb調試Linux內核——工欲善其事,必先利其器
今天我最終忍受不了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內核——工欲善其事,必先利其器