Vmware+gdb除錯Linux核心——工欲善其事,必先利其器
我們這裡主要分成幾個步驟:
1、vmware和linux的安裝
2、vmware編譯Linux核心
3、vmware和gdb主機的配置
4、測試
一、vmware和linux的安裝
1)VMware for Linux的安裝
官網下載地址:
注:官網下載需要進行註冊在太平洋等網站可以找到,但由於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)核心編譯
我的版本是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位機器則是8864埠)
然後開啟虛擬機器
效果如下:
5)(gdb)b start_kernel
(gdb)c
效果如下: