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

               效果例如以下:




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM