Vmware+gdb调试Linux内核——工欲善其事,必先利其器

来源:互联网 发布:windows arp命令 编辑:程序博客网 时间:2024/05/22 14:04

      今天我终于忍受不了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位机器则是8864端口)

               然后打开虚拟机

               效果如下:


       5)(gdb)b start_kernel

             (gdb)c

               效果如下:



0 0