Linux Kernel Debug环境搭建-VMware篇

前言

VMware作为虚拟机的老大哥,其稳定性与性能那是没话说的,这要是放在以前,可能不会有这篇文章,因为以前VMWare是需要付费的,博通收购之后,现在可以免费使用了,所以为了兼顾大家的喜好,现在再来介绍一下VMware安装ubuntu 24.04.2 LTS。

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

安装VMware

下载VMware

博通收购VMware之后,虽然能免费使用了,但是对于国内用户,下载是真困难啊,几经周折,我已经为大家下载好了,可以到这里下载:【免费】VMware-workstation-17.6.3-24583834资源-CSDN文库https://download.csdn.net/download/u010826758/90762384?spm=1001.2014.3001.5503

对于mac用户,需要安装VMware Fusion Pro,这个自行搜索下载吧

安装VMware

下载好之后,双击即可安装

安装ubuntu 24.04.2 LTS

上一篇中下载的ubuntu 24.04.2 LTS映像文件可以继续使用,没下载的,可以移步这里查看下载链接Linux Kernel Debug环境搭建-VirtualBox篇-CSDN博客,这里提供了中科大镜像站的下载链接,还是比较快的

创建虚拟机

打开VMware之后,点击主页中的创建新的虚拟机:

在新建虚拟机向导中,选择自定义,然后点击下一步:

然后使用默认配置即可,点击下一步:

然后选择稍后安装操作系统,点击下一步:

选择Linux,Ubuntu 64位:

然后为虚拟机起个名字,选择安装的路径:

处理器配置根据你自己的机器配置进行设置,建议不要超过一半:

内存也是根据自己机器配置进行分配,也是不要超过一半:

网络就默认就行:

IO控制类型也默认即可:

磁盘类型也默认:

选择创建新虚拟磁盘:

分配100GB磁盘,最好不要勾选立即分配所有磁盘空间

然后点击完成:

此时先不要运行虚拟机,点击编辑虚拟机设置

在虚拟机设置-硬件中选择CD/DVD,选择使用ISO映像文件,选择下载的Ubuntu 24.04.2映像文件:

然后再虚拟机设置-选项中选择共享文件夹,将其设置为总是启用,然后添加共享目录,这是为了方便以后与主机共享文件的:

最后再虚拟机设置-选项中点击高级,禁用侧通道缓解,因为这会影响虚拟机性能,固件类型选择UEFI

以上设置完成后,点击确定即可

安装ubuntu 24.04.2

现在可以运行虚拟机了,点击开启此虚拟机即可:

此时进入GRUB界面,选择Try or Install Ubuntu

后续步骤与 Linux Kernel Debug环境搭建-VirtualBox篇-CSDN博客 介绍的安装步骤就完全一样了,这里不再赘述,还没看的请移步查看

安装VMware Tools

首先打开终端(ctrl + alt + t),执行如下命令:

sudo apt update

 然后执行

sudo apt install open-vm-tools-desktop -y

即可完成安装:

现在虚拟机系统可以全屏了,也可以使用粘贴板了,同样地,由于我用的是4K显示器,全屏后显示的图标很小,所以需要到系统Settings-Displays中把缩放设置为200%:

结语


现在,我们完成了全部的Linux虚拟机准备工作,从下一篇开始,将在ubuntu 24.04.2 LTS上进行操作,包括安装一些依赖软件包,编译kernel等等,敬请期待~

征程终于踏出第一步!!!

<think>我们正在为Linux内核6.10设置kernel-gdb调试环境。这通常涉及以下步骤: 1. 准备内核源代码,并配置和编译内核,启用调试信息。 2. 构建一个初始RAM磁盘(initrd)或initramfs(可选,取决于你的内核配置)。 3. 安装内核并配置引导加载程序(如GRUB)。 4. 配置gdb以加载内核符号,并连接到目标系统(可以是虚拟机或另一台机器)进行调试。 由于我们是在开发机上调试,可能使用QEMU虚拟机来运行内核,这样调试起来更方便。 具体步骤: ### 1. 获取内核源代码 从[内核官方网站](https://www.kernel.org/)下载Linux 6.10源代码,或者使用git克隆: ```bash git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux git checkout v6.10 ``` ### 2. 配置内核 启用调试符号。在内核配置中,确保以下选项被设置: - `CONFIG_DEBUG_INFO=y`(在Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info) - `CONFIG_GDB_SCRIPTS=y`(提供gdb脚本支持,位于Kernel hacking -> Compile the kernel with debug info -> Provide GDB scripts for kernel debugging) 可以使用当前配置为基础,然后修改: ```bash cp /boot/config-$(uname -r) .config make oldconfig ``` 然后运行`make menuconfig`,进入"Kernel hacking",确保上述选项已启用。 ### 3. 编译内核 ```bash make -j$(nproc) ``` 编译完成后,内核镜像位于`arch/x86/boot/bzImage`(假设是x86架构)。 ### 4. 准备根文件系统 可以使用busybox制作一个简单的根文件系统。这里简要步骤: - 下载并编译busybox(设置静态链接): ```bash wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 tar xf busybox-1.36.1.tar.bz2 cd busybox-1.36.1 make menuconfig # 选择Settings -> Build static binary (no shared libs) make -j$(nproc) && make install ``` - 创建initramfs: ```bash cd _install mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin},dev} sudo cp -a /dev/{null,console,tty,tty1,tty2,tty3,tty4} dev/ rm linuxrc ``` - 创建init脚本(放在_install目录下): ```bash cat > init <<EOF #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys echo -e "\nBoot took \$(cut -d' ' -f1 /proc/uptime) seconds\n" exec /bin/sh EOF chmod +x init ``` - 打包initramfs: ```bash find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz ``` ### 5. 使用QEMU启动内核 ```bash qemu-system-x86_64 \ -kernel arch/x86/boot/bzImage \ -initrd ../busybox-1.36.1/initramfs.cpio.gz \ -append "console=ttyS0 nokaslr" \ -nographic \ -s -S # -s表示在1234端口等待gdb连接,-S表示启动时暂停 ``` ### 6. 使用gdb连接 在另一个终端中,启动gdb: ```bash gdb vmlinux # vmlinux是编译内核时生成的带有调试符号的内核文件 (gdb) target remote :1234 (gdb) continue ``` ### 7. 使用内核提供的gdb脚本(可选) 在内核源代码目录中,有一个脚本可以加载到gdb中,提供一些内核调试命令: ```bash (gdb) source ./scripts/gdb/vmlinux-gdb.py ``` ### 注意事项 - 如果使用物理机调试,需要配置kgdb(通过串口或网络),步骤更复杂。 - 在QEMU中,我们禁用了KASLR(通过`nokaslr`启动参数),以便gdb可以正确设置断点。 - 如果调试模块,需要加载模块的符号,可以使用`lx-symbols`(来自vmlinux-gdb.py)命令,但需要指定模块的路径。 ### 相关问题 1. 如何调试Linux内核模块? 2. 在没有QEMU的情况下,如何设置物理机之间的内核调试? 3. 如何在内核调试中设置断点并检查变量?</think>### 在 Linux Kernel 6.10 上搭建 kernel-gdb 调试环境 以下是完整的配置步骤,基于最新内核特性优化: #### 1. **准备内核源码与编译** ```bash # 获取内核源码(6.10 需替换为具体版本号) git clone --depth 1 --branch v6.10 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux # 配置调试选项 make menuconfig ``` **关键配置项**: - `CONFIG_DEBUG_INFO=y` (Kernel hacking → Compile-time checks → Compile the kernel with debug info) - `CONFIG_DEBUG_INFO_REDUCED=n` (确保完整调试信息) - `CONFIG_GDB_SCRIPTS=y` (启用内核GDB脚本支持) - `CONFIG_FRAME_POINTER=y` (优化栈回溯) ```bash # 编译内核(替换x86_64为实际架构) make -j$(nproc) ARCH=x86_64 O=build ``` #### 2. **配置调试符号** ```bash # 生成vmlinux-gdb.py脚本 ./scripts/gdb/linux/setup.py # 验证符号文件 ls -lh build/vmlinux # 应包含调试符号(通常 >500MB) ``` #### 3. **启动QEMU虚拟机** ```bash qemu-system-x86_64 \ -kernel build/arch/x86_64/boot/bzImage \ -append "nokaslr console=ttyS0" \ # 禁用KASLR确保地址一致 -initrd initramfs.img \ # 需提前准备 -s -S \ # -S: 启动时暂停 -s: 开启1234调试端口 -nographic ``` #### 4. **GDB调试连接** ```bash gdb build/vmlinux # 加载带符号的内核文件 (gdb) target remote :1234 (gdb) source ./scripts/gdb/vmlinux-gdb.py # 加载内核调试脚本 (gdb) lx-symbols # 自动加载模块符号 (gdb) hbreak start_kernel # 硬件断点 (gdb) continue ``` #### 5. **关键调试命令** ```bash (gdb) lx-ps # 查看进程列表 (gdb) lx-dmesg # 打印内核日志 (gdb) p task_struct->comm # 查看当前任务名 (gdb) bt # 栈回溯(需CONFIG_FRAME_POINTER) ``` #### 6. **调试模块** 加载模块时自动获取符号: ```bash (gdb) lx-symbols /path/to/module.ko (gdb) b module_init_function ``` #### 常见问题解决 1. **断点失效**: - 确认编译时启用 `CONFIG_DEBUG_INFO` - QEMU启动参数添加 `nokaslr` - 使用 `hbreak` 替代 `break` (硬件断点) 2. **符号缺失**: ```bash (gdb) set debug-file-directory /usr/lib/debug # 添加系统符号 (gdb) lx-symbols -s /custom/symbol/path ``` 3. **版本兼容**: - GDB需 ≥ 8.1 (支持Python3脚本) - QEMU建议 ≥ 6.2 (稳定调试接口) > 参考文档:[^1][^3][^4] --- ### 相关问题 1. 如何调试Linux内核启动过程中的内存初始化问题? 2. 使用kgdb调试物理机内核与QEMU调试有何区别? 3. 如何在内核崩溃时自动触发GDB调试? 4. 如何为ARM架构交叉编译调试内核
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

底层开发智库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值