QEMU 编译开发环境搭建

张开发
2026/4/21 5:48:15 15 分钟阅读

分享文章

QEMU 编译开发环境搭建
目录系统要求安装依赖Ubuntu / DebianFedoraArch Linux获取源码从官方仓库克隆使用镜像源可选配置编译选项最小化配置推荐开发调试配置常用配置参数编译构建验证安装开发工具配置生成 compile_commands.jsonVSCode 配置GDB 调试 QEMURust 开发环境配置可选附录CNB qemu-lab 云原生一键开发什么是 CNB qemu-lab一键启动流程1) Fork 仓库2) 进入云原生开发环境3) 获取并构建 QEMU4) 推荐的日常开发节奏常见问题本文介绍如何从零搭建 QEMU 编译开发环境覆盖依赖安装、源码获取、编译配置、构建验证和开发工具配置等环节。文末附有基于 CNB 的云原生一键开发方案适合希望跳过本地环境配置的同学快速上手。系统要求QEMU 支持在多种 Linux 发行版上构建推荐使用以下系统发行版推荐版本Ubuntu / Debian22.04 LTS 及以上Fedora38 及以上Arch Linux滚动更新WSL 用户Windows 用户可使用 WSL2 Ubuntu体验与原生 Linux 基本一致。安装 WSL2 后按 Ubuntu 流程操作即可。安装依赖Ubuntu / Debiansudo apt update sudo apt install -y git build-essential python3 python3-venv \ ninja-build pkg-config libglib2.0-dev libpixman-1-dev \ libslirp-dev libfdt-dev zlib1g-devFedorasudo dnf install -y git gcc g python3 ninja-build pkg-config \ glib2-devel pixman-devel libslirp-devel libfdt-devel zlib-develArch Linuxsudo pacman -S --needed git base-devel python ninja pkgconf \ glib2 pixman libslirp dtc完整依赖以上为编译 QEMU 的最小依赖集。获取源码从官方仓库克隆git clone https://gitlab.com/qemu-project/qemu.git cd qemu git submodule update --init --recursive使用镜像源可选如果gitlab.com访问不稳定可使用 GitHub 镜像git clone https://github.com/qemu/qemu.git版本选择建议使用稳定版本分支进行学习例如git checkout v10.0.3如需跟踪最新开发进度可使用master分支但可能遇到构建不稳定的情况。配置编译选项QEMU 使用 Meson 构建系统./configure是其封装脚本。最小化配置推荐主要使用 RISC-V 架构建议只编译所需的 target 以加快构建速度mkdir build cd build ../configure --target-listriscv64-softmmu --enable-slirp开发调试配置如需使用 GDB 调试 QEMU 源码添加调试信息../configure --target-listriscv64-softmmu --enable-debug --enable-slirp常用配置参数参数说明--target-list指定要编译的目标架构多个用逗号分隔--enable-debug启用调试信息-g -O0--enable-slirp启用用户态网络支持--prefix指定安装路径默认/usr/local--enable-trace-backendssimple启用简单 trace 后端查看所有选项../configure --help编译构建make -j$(nproc)或使用 Ninja更快ninja -C build编译时间参考仅编译riscv64-softmmu时在 8 核机器上通常只需几分钟。全量编译所有 target 可能需要更长时间。验证安装编译完成后验证二进制是否可用./build/qemu-system-riscv64 --version预期输出类似QEMU emulator version 10.0.3 Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers运行一个简单的测试./build/qemu-system-riscv64 -machine virt -nographic -bios none按CtrlA然后按X退出 QEMU。开发工具配置生成 compile_commands.json为 IDE 提供代码补全和跳转支持ninja -C build compile_commands.json生成的build/compile_commands.json可被 VSCodeC/C 插件或 clangd、Vimcoc-clangd等编辑器识别。VSCode 配置安装推荐插件clangd— 代码补全、跳转、诊断推荐替代 Microsoft C/C 插件CodeLLDB或Native Debug— 图形化调试在项目根目录创建.vscode/settings.json{ clangd.arguments: [ --compile-commands-dir${workspaceFolder}/build ] }GDB 调试 QEMUgdb --args ./build/qemu-system-riscv64 -machine virt -nographic -bios noneRust 开发环境配置可选如需启用 QEMU 的 Rust 支持用于 Rust 设备模型开发需要额外安装 Rust 工具链和 bindgencurl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env cargo install bindgen-cli配置时添加--enable-rust并确保target-list包含riscv64-softmmumkdir build-rust cd build-rust ../configure \ --target-listriscv64-softmmu \ --enable-rust \ --enable-slirp附录CNB qemu-lab 云原生一键开发如果你不想花时间在本地配置环境可以使用 CNBCloud Native Build平台提供的云端开发环境。qemu-lab项目已经预配置了完整的 QEMU 编译环境开箱即用。什么是 CNB qemu-labqemu-lab把环境准备前置到云端你只需要 Fork 仓库并进入 CNB 工作区就可以直接进入可构建、可调试的开发状态无需手动安装任何依赖。仓库地址https://cnb.cool/gevico.online/qemu-lab参考 READMEhttps://cnb.cool/gevico.online/qemu-lab/-/blob/main/README.md一键启动流程1) Fork 仓库在浏览器打开 qemu-lab 仓库点击 Fork 按钮得到自己的仓库副本。2) 进入云原生开发环境在你的仓库页面点击云原生开发打开 Cloud IDE 工作区。首次进入时平台会按仓库中的.cnb.yml与.ide/配置自动初始化环境。团队协作建议统一基于同一份 Fork 模板开展开发降低我这里能跑、你那边跑不起来的概率。3) 获取并构建 QEMU环境就绪后在终端中执行git clone https://gitlab.com/qemu-project/qemu.git cd qemu ./configure make -j$(nproc)4) 推荐的日常开发节奏进入 CNB 工作区等待环境初始化完成同步/更新 QEMU 源码执行一次完整构建确认基线可用进行小步修改并局部验证需要复现问题时直接分享仓库分支与命令序列常见问题初始化后命令不可用先确认工作区初始化是否完成再检查仓库中的.cnb.yml与.ide/是否被误改。构建速度慢检查并行参数是否生效nproc make -j$(nproc)如果工作区规格较小可先用较低并行度验证功能再切换更高规格实例做全量构建。

更多文章