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

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

      今天我终于忍受不了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

               效果如下:



qemu + busybox + gdb 构建linux内核调试环境 调试环境主要涉及以下工具,及对应版本号qemu 4.2.0。 阅读详情

相关推荐

VMware+GDB调试Linux内核启动:从串口管道到KGDB实战

内核调试是深入理解操作系统核心机制和解决系统级问题的关键技术。其原理在于通过调试器(如GDB)与被调试内核建立通信,实时监控和控制系统执行流,从而实现对内存、寄存器、函数调用栈的精细观察与控制。这项技术的核心价值在于能够定位传统日志无法捕获的底层问题,例如系统启动早期的硬件初始化故障、驱动加载异常或内核崩溃。在虚拟化环境中,通过模拟串口设备并重定向到命名管道,可以构建稳定的调试通道,使得调试器能够附着到虚拟机内核,实现从BIOS/UEFI到init进程的全流程跟踪。本文聚焦于**KGDB**与**串口调试*

weixin_34319374的博客 325

Linux 内核系列】基于 VMware Ubuntu18 编译调试 Linux 内核

【1】环境与工具简介15Qemu、Busybox、Linux内核工具资源下载链接https://download.csdn.net/download/qq_27788177/85749771【2】Linux 内核编译 安装相关依赖软件包 配置 Linux 内核 VMware 启动时选择新编译的 LInux 内核 【3】Qemu 编译安装 安装相关依赖软件包 配置、编译、安装 Qemu 【4】Busybox 编译与使用

CopperSun 技术博客 1591

Linux Kernel Debug环境搭建-VMware

在经历了前一篇VirtualBox安装ubuntu 24.04.2 LTS之后,现在使用VMware安装,基本就简单多了,安装ubuntu的过程是一致的,只是虚拟机软件的操作不同。

u010826758的专栏 237

VMware中用Kgdb调试linux内核

1,在vmware中安装Ubuntu 10.04 LTS,该虚拟机命名为client2,在unbuntu中手动安装ncurses-6.0.tar.gz3,make menuconfig 设置编译选项make menuconfig File System --> 下面把ext3,ext2都编译进内核(就是把前面的M变成*) Kernel Hacking -->       1,选中Com...

dongoewang的博客 1763

使用vmware workstation+gdb调试虚拟机的启动过程

debugStub.hideBreakpoints = “TRUE”: 这个参数在调试过程中隐藏断点信息,使得调试过程更加隐秘。debugStub.listen.guest64.remote = “TRUE”: 这个参数指示虚拟机启用远程调试功能,允许使用远程调试器连接到虚拟机并进行调试操作。debugStub.listen.guest64 = “TRUE”: 这个参数启用了虚拟机的64位客户机调试功能,允许在64位客户机操作系统中进行调试

weixin_52111404的博客 3814

Vmware虚拟机上如何编译与安装linux内核

基于vmwarelinux内核编译与安装

weixin_42581825的博客 4479

使用VMware Workstation与GDB调试Linux虚拟机启动过程实战指南

内核调试是深入理解操作系统底层运行机制的关键技术,尤其在系统启动、驱动加载等早期阶段,传统日志调试手段往往失效。其核心原理是通过调试器与目标系统建立通信通道,实现对代码执行流程、内存状态和寄存器值的实时监控与控制。这项技术的核心价值在于能够对系统初始化过程进行逐指令跟踪,为排查启动故障、学习内核原理提供了不可替代的视角。在虚拟化环境中,调试启动过程的需求尤为常见,例如诊断虚拟机启动卡死、服务初始化失败等疑难问题。本文聚焦于如何在普及率极高的VMware Workstation环境中,通过配置虚拟串口与GDB

weixin_30443813的博客 427

VMWARE中使用KGDB进行源码级Linux内核调试

Linux Kernel Hacking With KGDB in VMWAREVMWARE中使用KGDB进行源码级Linux内核调试   CopyRight By MikeFeng   [环境]    VMWARE 5.5               Windows XP SP2(可替换) 虚拟机Ubuntu 6.06 (被调试机) 虚拟机Kubuntu 6.10 (调试

云破日出 6243

利用GDB、KGDB调试应用程序及内核驱动模块

利用GDB、KGDB调试应用程序及内核驱动模块 2017-03-13孙 建坡GDB,GDB KGDB,GDB双机调试,KGDB调试应用程序,利用GDB,核驱动模块,编译内核,调试应用程序,配置串口调试,配置双机通信 文章目录 阅读:12,063 这几天看了一下linux内核提权的一个漏洞,里面涉及到了驱动程序漏洞及驱动调试内容,由于各类linux操作系统版本的不同,如果不能在自己机器上亲自调试驱动程序,可以说即使给了漏洞利用的POC源码也根本无法成功利用。因为内核漏洞的利用涉及...

u014426028的博客 933

VMware上使用VScode+qemu+gdb调试linux内核文件系统

使用VScode+qemu+gdb调试linux内核中的gfs2文件系统

qq_57973134的博客 523

使用KGDB构建Linux内核调试环境

Kgdb 的配置

ruixj的专栏 8235

VMware环境下,使用KGDB调试内核内核模块---基于kernel 2.6.26

VMware环境下使用KGDB调试Linux内核内核模块1:前言:    最近几天学习Linux-2.6平台上的设备驱动,所以要建立内核内核模块的调试平台.虽然网上有很多相关教程,但多是基于2.6.26以前的通过补丁安装的,过程非常复杂,而且问题比较多.linux从 2.6.26开始已经集成了kgdb,只需要重新编译2.6.26(或更高)内核即可.kgdb

jie12310的专栏 1万+

gdb 调试 Linux 内核网络源码(附视频)

最近在看 Linux 内核的网络部分源码,在 MacOS 上搭建调试环境(windows 应该也支持),通过 gdb 调试,熟悉内核网络接口的工作流程。 调试环境搭建视频:gdb 调试 Linux 内核网络源码。 ????文章来源:gdb 调试 Linux 内核网络源码 1. 目标 目标:gdb 调试 Linux 内核网络部分源码。 环境:macos + vmware + ubuntu + qemu + gdb + linux kernel。 参考:构建调试Linux内核网络代码的环境MenuO

wenfh2020的专栏 468

使用QEMU搭建Linux内核开发调试环境:从编译到GDB源码级调试

虚拟化与模拟技术是现代系统开发与测试的基石,通过在软件层面模拟完整的硬件环境,为开发者提供了安全、可控的实验平台。QEMU作为一款开源的通用机器模拟器,其核心原理是通过二进制翻译实现跨架构的指令模拟,不依赖特定CPU虚拟化扩展,从而提供了无与伦比的灵活性。这一技术对于操作系统内核开发具有重要价值,它允许开发者在隔离的沙箱环境中测试底层代码,避免因内核崩溃导致物理机故障,同时支持快速迭代和精确的调试控制。在Linux内核开发场景中,QEMU能够模拟从加电启动开始的完整计算机系统,结合GDB调试协议,开发者可以

weixin_33922672的博客 553

VMware环境下用kgdb调试内核

kgdb的搭建

ruixj的专栏 3784
上一篇: uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
下一篇: C语言移位运算符
GrubLinux
博客等级 码龄12年 40粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值