今天我最终忍受不了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中继续例如以下的设置:

         

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR3J1YkxpbnV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="361" width="590" alt="">

         上图的意思是虚拟机中/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内核——工欲善其事,必先利其器的更多相关文章

  1. 在qemu环境中用gdb调试Linux内核

    简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...

  2. Gdb远程调试Linux内核遇到的Bug

    知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cn ...

  3. 利用QEMU+GDB搭建Linux内核调试环境

    前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...

  4. 用qemu+gdb tcp server+CDT调试linux内核启动-起步

    用qemu+gdb tcp server+CDT调试linux内核启动-起步 说明: 环境信息与 用virtualbox+模拟串口+CDT调试linux内核 TCP IP协议栈-起步 提到的一样,并且 ...

  5. 使用QEMU调试Linux内核代码

    http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510. ...

  6. VELT-0.1.5开发:使用kgdb调试Linux内核【转】

    转自:http://demo.netfoucs.com/lights_joy/article/details/44106589 VELT的全称是Visual EmbedLinuxTools,它是一个与 ...

  7. 跟踪调试Linux内核的启动过程

    跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  8. 使用 ftrace 调试 Linux 内核【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...

  9. 用 kGDB 调试 Linux 内核

    简介 这个文档记录了用kGDB调试Linux内核的全过程,都是在前人工作基础上的一些总结.以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台. 要使用KGDB来调试内核,首先需要修改conf ...

随机推荐

  1. WINDOWS开发PHP7扩展

    最近在做个项目,需要用到唯一ID的生成,原本在Java和Delphi中,做了一个生成20位字符串(160bit)形式的唯一ID的算法,但是对比GUID(128bit),除了看起来比他短之外,其他并无优 ...

  2. xctf --Hctf2014 Quals write up

    描述 猫流大大发现一个女神,你能告诉我女神的名字么(名字即是flag) nvshen.zip Solution: Extract the file and we could find a txt wh ...

  3. HDU 5253 最小生成树 kruscal

    Description 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老天格外的不开眼,大旱.所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行 ...

  4. struts2 package 属性说明

    package节点是整个配置的核心部分.每个package,从语义上讲,其实代表了每一个独立的模块.在这个模块中,你可以定义隶属于这个模块的行为方式,而与其他的模块没有关系.所以,每个package都 ...

  5. Codeforces Round #453 Div. 2 A B C D (暂时)

    // 从大作业和实验报告中爬出来水一发 // 补题...还是得排在写完实验报告之后... A. Visiting a Friend 题意 给定若干段行车区间,问能否从起点到终点 思路 扫描一遍,维护最 ...

  6. usb 2.0 operation mode

    一般來說 USB 的通訊結構有如 Server/Client,以 PC 上的情形為例,位於主機上的 USB 裝置稱為『USB Host』,我們可以在上面外接上數個裝置(與 USB Host 相連的裝置 ...

  7. PyCharm 快捷键总结

    运行 Shift+alt+F10 执行程序 调试 Shift+alt+F9 Debug调试 Shift + F9 对当前文件进行Debug F8 调试模式下 跳过 F7 调试模式下 进入 F9 快速调 ...

  8. MAX() OVER() 函数

    SELECT T1.FRAMENO, T1.UNDERTAKER10,T1.STATUSCODEDATE10, MAX(T1.STATUSCODEDATE10) OVER(PARTITION BY T ...

  9. CSS定位与布局:浮动

    浮动的特点   浮动(float)属性提出的作用是实现文字的环绕效果,一个元素浮动后,会脱离普通流.主要的特点如下: 浮动的元素会向左或者向右移动直到它的外边缘接触容器框(containing blo ...

  10. luogu P1345 [USACO5.4]奶牛的电信Telecowmunication

    https://www.luogu.org/problemnew/show/1345 拆点,中间建流量为1的边,跑最小割 #include<cstdio> #include<queu ...