2. 环境准备:宿主机操作系统与必要软件包
搭建 QEMU + kgdb 联调环境的第一步是准备一台功能完备的宿主机。宿主机承载内核编译、QEMU 虚拟化运行以及 GDB 调试会话,其软件栈的完整性直接影响后续调试效率。本节将明确操作系统选型理由,并逐一安装核心工具链。
2.1 宿主机操作系统选择:Ubuntu 22.04 LTS
本课程选用 Ubuntu 22.04 LTS (Jammy Jellyfish) 作为宿主机操作系统,主要基于以下考量:
| 评估维度 | Ubuntu 22.04 LTS | 其他发行版对比 |
|---|---|---|
| 内核版本 | 默认 5.15 LTS,兼容性广 | 较新内核可能引入 kgdb 适配问题 |
| 软件包新鲜度 | GCC 11.x、GDB 12.x、QEMU 7.x | 过旧版本缺少 gdb-multiarch 支持 |
| LTS 支持周期 | 5 年安全更新(至 2027) | 非 LTS 版本需频繁升级 |
| 社区生态 | 内核调试文档丰富,问题响应快 | 小众发行版需自行排查依赖 |
| 虚拟化支持 | KVM 开箱即用,嵌套虚拟化稳定 | 部分发行版需额外配置内核模块 |
提示: 若你使用其他 Ubuntu 版本(如 20.04 或 24.04),大部分步骤仍然适用,但需注意软件包版本差异。建议在虚拟机或独立分区中搭建环境,避免影响生产系统。
2.2 必要软件包清单与安装
以下软件包构成调试环境的基础。按功能分组列出,便于理解每项工具的用途:
| 类别 | 软件包名 | 作用说明 |
|---|---|---|
| 编译工具链 | build-essential |
包含 GCC、G++、make 等内核编译必需工具 |
libncurses-dev |
提供 menuconfig 图形化配置界面 |
|
| 调试器 | gdb-multiarch |
支持多架构(x86_64、ARM64、RISC-V)的 GDB |
gdbserver |
远程调试场景的 stub 服务端(kgdb 可选) | |
| 虚拟化 | qemu-system-x86 |
x86_64 架构的 QEMU 系统模拟器 |
qemu-utils |
提供 qemu-img 等磁盘镜像管理工具 |
|
| 版本控制 | git |
获取内核源码、管理补丁 |
| 文件系统 | cpio fakeroot |
制作 initramfs 根文件系统 |
2.2.1 一键安装命令
在终端中执行以下命令,一次性安装所有必要软件包:
sudo apt update
sudo apt install -y \
build-essential \
libncurses-dev \
gdb-multiarch \
gdbserver \
qemu-system-x86 \
qemu-utils \
git \
cpio \
fakeroot
验证安装: 安装完成后,运行
gdb-multiarch --version 应显示 GDB 版本信息;运行 qemu-system-x86_64 --version 应显示 QEMU 版本。若命令未找到,请检查 $PATH 或重新安装对应包。
2.3 软件包版本确认
不同版本的 GDB 和 QEMU 在 kgdb 联调时的行为略有差异。建议记录当前版本,以便后续排查兼容性问题:
# 查看关键工具版本
echo "=== GCC ===" && gcc --version | head -n1
echo "=== GDB ===" && gdb-multiarch --version | head -n1
echo "=== QEMU ===" && qemu-system-x86_64 --version | head -n1
echo "=== Git ===" && git --version
预期输出示例(实际版本可能因更新而异):
=== GCC ===
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
=== GDB ===
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
=== QEMU ===
QEMU emulator version 7.2.0 (qemu-7.2.0)
=== Git ===
git version 2.34.1
2.4 环境依赖关系总览
下图展示了宿主机上各软件组件之间的依赖与协作关系,帮助理解后续章节中每一步操作所处的生态位置:
2.5 常见问题与避坑指南
- gdb-multiarch 缺失: 若
apt install gdb-multiarch提示找不到包,请先执行sudo apt update并确保 Ubuntu 22.04 的 universe 仓库已启用。 - QEMU 版本过旧: Ubuntu 22.04 默认仓库提供 QEMU 7.2,若需更新版本,可添加
ppa:jacob/virtualisationPPA 源。 - 权限问题: 使用
qemu-system-x86_64时若提示Permission denied,请确认当前用户已加入kvm用户组:sudo usermod -aG kvm $USER,然后重新登录。 - 内核编译依赖: 除
build-essential外,编译内核还需flex、bison、elfutils等工具,后续章节会补充安装。
注意: 不要使用
apt install gdb 替代 gdb-multiarch。普通 gdb 仅支持宿主机本地架构,而 gdb-multiarch 支持交叉调试(例如在 x86_64 宿主机上调试 ARM64 内核),这是 kgdb 联调场景的必备能力。
2.6 环境就绪检查清单
完成上述安装后,逐项核对以下清单,确保环境完全就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| GCC 可用 | gcc --version |
显示版本号 ≥ 11.x |
| GDB 多架构支持 | gdb-multiarch --configuration |
输出包含 --enable-targets=all |
| QEMU 系统模拟 | qemu-system-x86_64 --machine help |
列出支持的机器类型列表 |
| Git 可用 | git --version |
显示版本号 ≥ 2.34 |
| 内核源码准备 | ls /usr/src/linux-* 或自定义路径 |
存在内核源码目录(后续章节下载) |