zoukankan      html  css  js  c++  java
  • 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

                   效果例如以下:



  • 相关阅读:
    .NET Framework 精简版多线程提示
    创建全球化的 Windows Mobile 应用程序
    【转】Windows Mobile 进阶系列——多窗体应用的性能与编程调试1
    关于MOBILE注册表操作.
    windows下squid安装与配置
    关于Windows mobile注册表
    aaaaaaaaaaaaaa
    记GraphicsMagick压缩图片命令
    使用Sublime Text 2开发php
    SQL Server 2005中使用事务发布实现数据库复制
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6844459.html
Copyright © 2011-2022 走看看