QEMU 是一款功能强大的模拟器,可以模拟多种硬件平台,包括 x86, ARM, MIPS 等,同时还支持调试内核。本文介绍如何使用 QEMU 调试 Linux 内核。

  1. 确认环境

首先,要确认本地环境中已经安装了 QEMU 和 gdb。如果没有安装,请使用以下命令安装:

sudo apt-get install qemu gdb
  1. 下载内核代码

从官网或者 Github 上下载最新的 Linux 内核代码:

git clone https://github.com/torvalds/linux.git
  1. 编译内核

进入内核代码目录,使用以下命令编译内核:

make defconfig
make -j4

其中,-j4 表示使用 4 个线程编译,可以根据机器的 CPU 核数自行调整。

  1. 启动 QEMU

使用以下命令启动 QEMU:

qemu-system-x86_64 -kernel arch/x86/boot/bzImage -s -S

其中,

  • -kernel 指定内核镜像文件
  • -s 启动 GDB 并监听 1234 端口
  • -S 启动 QEMU 后暂停,等待 GDB 连接
  1. 连接 GDB

打开一个新的控制台窗口,使用以下命令连接 GDB:

gdb vmlinux

其中,vmlinux 是编译出来的内核 ELF 文件。

在 GDB 中,使用以下命令连接到 QEMU:

target remote localhost:1234
  1. 调试内核

现在,可以在 GDB 中使用所有的调试命令了,比如:

  • b: 设置断点
  • c: 继续执行
  • si: 单步执行
  • info registers: 查看寄存器值
  • x: 查看内存内容

等等。

当需要退出调试时,可以在 GDB 中使用以下命令:

q

或者直接关闭 GDB 窗口。

参考文献:

  • https://wiki.osdev.org/QEMU#Debugging_with_GDB
  • https://www.kernel.org/doc/html/latest/dev-tools/gdb-kernel-debugging.html
QEMU 调试 Linux 内核:入门指南

原文地址: https://www.cveoy.top/t/topic/lM3i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录