3. 宿主机环境准备:Ubuntu 22.04 LTS 安装与必要工具链

搭建 QEMU + Linux 内核模块调试环境的第一步,是准备一台稳定、软件源丰富的宿主机。本课程选用 Ubuntu 22.04 LTS (Jammy Jellyfish) 作为宿主操作系统,其长期支持特性与广泛的社区软件包能最大程度降低环境配置的复杂度。

版本选择说明: 虽然 Ubuntu 24.04 LTS 已发布,但 22.04 在 QEMU 7.x/8.x 兼容性、内核编译工具链版本(GCC 11/12)以及大量嵌入式开发文档方面仍是最成熟的选择。若你使用其他发行版(如 Debian 12、Fedora 38),请自行调整包管理器命令,但核心工具链概念完全通用。

3.1 操作系统安装要点

Ubuntu 22.04 的安装过程较为直观,以下列出与驱动开发环境相关的关键配置项:

配置阶段 推荐选项 说明
磁盘分区 LVM 或 ext4,至少分配 80 GB 内核源码树(~15 GB)、编译中间文件(~20 GB)、QEMU 磁盘镜像(~10 GB)均需大量空间
内存分配 ≥ 8 GB(物理机) 编译 Linux 内核时,make -j$(nproc) 会消耗大量内存,低于 4 GB 极易触发 OOM
CPU 核心 ≥ 4 核 多核编译能显著缩短内核构建时间(从 1 小时降至 15 分钟以内)
网络配置 桥接模式或 NAT 后续 QEMU 虚拟机需要访问宿主机网络下载内核模块依赖
避坑提示: 不要在虚拟机中嵌套运行本课程的环境。在 VirtualBox/VMware 虚拟机内再启动 QEMU 虚拟机(嵌套虚拟化)会导致性能严重下降,且 KVM 加速无法生效。建议在物理机上直接安装 Ubuntu 22.04 双系统或作为主系统。

3.2 必要工具链安装

登录系统后,首先更新软件源并安装核心开发工具。以下命令将一次性安装本课程所需的全部基础工具:

# 更新软件包索引
sudo apt update

# 安装核心编译工具链
sudo apt install -y \
    build-essential \
    gcc \
    g++ \
    make \
    git \
    libncurses-dev \
    flex \
    bison \
    libssl-dev \
    libelf-dev \
    bc \
    cpio \
    kmod \
    qemu-system-x86 \
    qemu-utils

各工具在驱动开发环境中的具体作用如下表所示:

软件包 版本参考 在环境中的角色
build-essential 12.9 (ubuntu) 元包,自动安装 GCC/G++/make 等核心编译工具
gcc 11.4.0 编译宿主机工具(如 QEMU 辅助程序)及交叉编译内核模块
make 4.3 驱动内核与模块的构建系统调度器
git 2.34.1 管理内核源码版本、打补丁、追踪驱动代码变更
libncurses-dev 6.3 提供 make menuconfig 所需的终端图形界面库
flex / bison 2.6.4 / 3.8.2 内核配置系统(Kconfig)的词法/语法分析器
libssl-dev 3.0.2 内核模块签名、加密文件系统等功能的编译依赖
libelf-dev 0.186 处理 ELF 格式内核镜像(vmlinux)的必要库
bc 1.07.1 内核编译脚本中的数学计算工具
cpio 2.13 制作 initramfs 根文件系统镜像
qemu-system-x86 7.2.0 X86_64 架构的 QEMU 系统模拟器(含 KVM 加速)
qemu-utils 7.2.0 提供 qemu-img 等磁盘镜像管理工具

3.3 工具链验证

安装完成后,执行以下命令验证关键工具是否就绪:

# 验证 GCC
gcc --version | head -n 1
# 输出示例:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

# 验证 Make
make --version | head -n 1
# 输出示例:GNU Make 4.3

# 验证 Git
git --version
# 输出示例:git version 2.34.1

# 验证 ncurses 库(通过 pkg-config)
pkg-config --modversion ncurses
# 输出示例:6.3

# 验证 QEMU
qemu-system-x86_64 --version | head -n 1
# 输出示例:QEMU emulator version 7.2.0 (qemu-7.2.0)
关键检查点: 如果 pkg-config --modversion ncurses 返回空或报错,说明 libncurses-dev 未正确安装。此时运行 make menuconfig 配置内核时会直接报错退出。请重新执行 sudo apt install --reinstall libncurses-dev。

3.4 工具链协作流程

下图展示了宿主机工具链在驱动开发与调试过程中的协作关系:

宿主机工具链协作流程 Linux 内核源码 git clone / 补丁管理 驱动模块源码 .c / .h 文件 内核配置 make menuconfig 编译工具链 GCC + Make + LD + libncurses-dev (menuconfig 界面) vmlinux / bzImage 内核镜像 .ko 模块文件 可加载内核模块 initramfs 初始根文件系统 QEMU 虚拟机(加载内核 + 模块测试)

3.5 可选增强工具

以下工具非强制安装,但能显著提升开发效率,建议一并配置:

  • ccache — 编译缓存工具,重复编译内核时可节省 50% 以上时间:sudo apt install ccache
  • tree — 以树形结构查看内核源码目录:sudo apt install tree
  • vim / neovim — 配合 cscope / ctags 进行内核代码跳转
  • ssh / tmux — 远程开发与持久化终端会话管理
效率技巧: 安装 ccache 后,在编译内核前执行 export CC="ccache gcc",后续 make 命令会自动使用缓存。首次编译仍为全量编译,但第二次起仅重新编译变更文件,速度提升极为明显。

3.6 环境就绪检查清单

完成上述步骤后,请逐项核对以下清单,确保宿主机环境完全就绪:

检查项 验证命令 预期结果
GCC 可用 gcc --version 显示版本号 ≥ 11.3.0
Make 可用 make --version 显示版本号 ≥ 4.3
Git 可用 git --version 显示版本号 ≥ 2.30
ncurses 库正常 pkg-config --libs ncurses 返回 -lncurses 等链接参数
QEMU 可用 qemu-system-x86_64 --version 显示版本号 ≥ 7.0.0
KVM 加速支持 kvm-ok(需安装 cpu-checker) 输出 KVM acceleration can be used

至此,宿主机环境已准备完毕。下一阶段我们将获取 Linux 内核源码并配置编译选项,为 QEMU 虚拟机定制专用内核镜像。