2. 环境准备:安装QEMU、安装交叉编译工具链、安装GDB多架构调试器

在进行kgdb远程调试之前,必须搭建一套完整的实验环境。本章将指导你依次安装三个核心组件:QEMU模拟器(提供虚拟硬件平台)、交叉编译工具链(编译目标架构内核与模块)、GDB多架构调试器(发起远程调试会话)。三者缺一不可,构成调试闭环。

环境概览:本课程以 ARM64 (aarch64) 为目标架构,宿主机为 x86_64 Linux。所有工具均通过包管理器或官方源码安装,确保版本兼容。
kgdb 远程调试环境组件关系 宿主机 (x86_64) Ubuntu 22.04 / Fedora 38 GDB (aarch64 架构) 交叉编译工具链 QEMU 模拟器 virt 平台 / ARM64 模拟 目标内核 (Linux ARM64) vmlinux + Image + 调试符号 TCP 连接 (默认 1234 端口)

2.1 安装 QEMU 模拟器

QEMU 提供机器级虚拟化,支持多种目标架构。我们选择 qemu-system-aarch64 来模拟 ARM64 平台,配合 virt 机器类型,该类型对内核调试支持完善。

2.1.1 通过包管理器安装(推荐)

# Ubuntu / Debian
sudo apt update
sudo apt install qemu-system-arm qemu-utils

# Fedora / RHEL
sudo dnf install qemu-system-aarch64 qemu-img

# Arch Linux
sudo pacman -S qemu-system-aarch64 qemu-img

2.1.2 验证安装

# 检查 QEMU 版本
qemu-system-aarch64 --version

# 列出支持的机器类型(确认 virt 存在)
qemu-system-aarch64 -M help | grep virt
版本要求:建议 QEMU ≥ 7.0.0,以支持完整的 GDB stub 功能和 SMP 模拟。低于 6.0 的版本可能在断点处理上存在兼容性问题。

2.2 安装交叉编译工具链

交叉编译工具链用于在 x86_64 宿主机上编译 ARM64 架构的内核和模块。我们使用 GNU GCC 交叉工具链,目标三元组为 aarch64-linux-gnu-。

2.2.1 安装交叉编译器

# Ubuntu / Debian
sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

# Fedora / RHEL
sudo dnf install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

# 验证安装
aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-objdump --version

2.2.2 工具链组件清单

组件 命令前缀 用途
C 编译器 aarch64-linux-gnu-gcc 编译内核 C 源码
汇编器 aarch64-linux-gnu-as 汇编启动代码
链接器 aarch64-linux-gnu-ld 链接内核映像
目标文件工具 aarch64-linux-gnu-objcopy 转换 ELF 到二进制 Image
反汇编器 aarch64-linux-gnu-objdump 调试时查看汇编指令
符号查看器 aarch64-linux-gnu-nm 列出内核符号表
注意:不要使用宿主机自带的 gcc 编译 ARM64 内核,否则生成的二进制无法在 QEMU 中运行。必须使用带 aarch64-linux-gnu- 前缀的交叉工具。

2.3 安装 GDB 多架构调试器

GDB 是远程调试的核心。标准发行版自带的 GDB 通常只支持本机架构,我们需要安装支持 多架构 的版本,使其能够解析 ARM64 的 ELF 文件并连接 QEMU 的 GDB stub。

2.3.1 安装 GDB 多架构版本

# Ubuntu / Debian
sudo apt install gdb-multiarch

# Fedora / RHEL(需要启用 EPEL 或使用源码编译)
sudo dnf install gdb-multiarch

# 验证安装
gdb-multiarch --version

# 确认支持 aarch64 架构
gdb-multiarch -batch -ex "set architecture aarch64" -ex "info architecture"

2.3.2 架构支持对比

GDB 版本 支持架构 适用场景
gdb(默认) 仅宿主机架构(x86_64) 调试本地程序
gdb-multiarch ARM64、ARM、RISC-V、MIPS 等 跨架构远程调试
aarch64-linux-gnu-gdb 仅 ARM64 专用调试(可选)
推荐选择:本课程统一使用 gdb-multiarch,因为它一次安装即可支持多种目标架构,适合后续扩展调试其他平台。

2.4 环境验证:快速连通测试

安装完成后,执行以下步骤验证三个组件能否协同工作:

  1. 编译一个最小的 ARM64 测试程序:
    aarch64-linux-gnu-gcc -o test-arm64 test.c -static
  2. 用 QEMU 用户态模式运行:
    qemu-aarch64 ./test-arm64
  3. 用 GDB 多架构调试器加载:
    gdb-multiarch -q --ex "file test-arm64" --ex "set architecture aarch64" --ex "info target"

如果以上三步均无报错,说明环境准备就绪,可以进入下一章的内核编译与调试配置。

环境清单速查:
  • ✅ QEMU 模拟器:qemu-system-aarch64 已安装
  • ✅ 交叉编译工具链:aarch64-linux-gnu-gcc 可用
  • ✅ GDB 多架构调试器:gdb-multiarch 支持 aarch64