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

               效果例如以下:

时间: 2024-10-10 08:42:47

Vmware+gdb调试Linux内核——工欲善其事,必先利其器的相关文章

gdb调试linux内核arm构架

视频地址:https://www.bilibili.com/video/av47411075安装依赖sudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gdb-arm-none-eabi synaptic gcc-aarch64-linux-gnu eclipse-cdt git下载源码:git initgit fetch https://github.com/figozhang/runn

用KGdb和VMware调试Linux内核,System Call

Linux的内核和System Call不好调试,参考这里: http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code 简单来说,如果想在本机调试system call,那么当你进入system call时,系统已经在挂起状态了,那么它又怎样能响应用户的输入? 所以,有一个UML(http://user-mode-linux.sourceforge.net/)的方式,把内核当成一个进程启

Eclispe+qemu+gdb调试linux Kernel

单步调试kernel说明 恩,这个文档的目标是单步调试内核,从每一个工具软件的版本号到每一个命令,都有一个说明 ubuntu1204,32位 http://www.ubuntu.org.cn/download/desktop 用vmware虚拟机安装该系统. 用64位系统时,gdb有bug.报错信息为:xxx太长.所以建议用32位系统 编译kernel 3.5.4 下载内核的地址,北京交通大学的映像地址:http://mirror.bjtu.edu.cn/kernel/linux/kernel/

VELT-0.1.5开发:使用kgdb调试Linux内核

VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights

用qemu与gdb调试linux kernel tcp/ip协议栈

description 用gdb debug linux kernel容易吗?其实要走到这步真的不容易啊,其实也难道是不难,就是要知道的东西太多了.用gdb debug linux kernel 可以有2中方式:UML和qemu方式,这里主要说qemu,从源码编译安装qemu很费劲. 准备环境 linux OS: Debian7.5-i386(当时最新的Wheezy,装在VMware10上,我用的在线安装,安装后以text方式跑起来,我的笔记本配置资源有限!) root fs:Debian-Wh

用 kGDB 调试 Linux 内核

简介 这个文档记录了用kGDB调试Linux内核的全过程,都是在前人工作基础上的一些总结.以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台. 要使用KGDB来调试内核,首先需要修改config配置文件,打开相应的配置,配置内核启动参数,甚至修改串口驱动添加poll支持,然后才能通过串口远程调试内核. 配置内核 基本配置 在内核配置文件:.config中,需要打开如下选项 CONFIG_KGDB 加入KGDB支持 CONFIG_KGDB_SERIAL_CONSOLE 使KGDB通过串口

大杀招之使用QEMU调试Linux内核代码

Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试. 这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用以下的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1. QEMU的安装 这个可以自己去QEMU的官网下载编译,

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

跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 本次的实验是使用gdb跟踪调试内核从start_kernel到init进程启动,并分析启动的过程. 1.首先是在实验楼虚拟机上进行调试跟踪的过程. (1) 先构造一个简单的Linux系统 (2) 接下来使用gdb跟踪调试内核 启动(窗口被冻结) 另开一个shell窗口(水平分割)

使用QEMU调试Linux内核代码

Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试.这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用以下的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1,QEMU的安装 这个可以自己去QEMU的官网下载编译,如果