🚄 1. QEMU 简介
QEMU 是 Quick Emulator 的缩写。官方定义:QEMU 是一个开源的机器仿真器和虚拟化工具,支持在一种 CPU 架构上模拟另一种 CPU 架构的运行环境。
什么意思呢?
比如你有一个交叉编译器,它是 x86_64 架构的二进制文件,但你手里只有一台 aarch64 架构的机器,直接运行的话会报错:
-bash: /opt/toolchains/bin/arm-cortex_a9-linux-gnueabi-gcc:
cannot execute binary file: Exec format error
这是因为 CPU 架构不匹配,系统无法执行该二进制文件。
此时,如果你想在 aarch64 机器上用它,就需要在 aarch64 系统里用 QEMU 模拟一个 x86_64 环境,把这个编译器丢进去运行。
QEMU 有两种主要玩法:
-
用户模式仿真(User-mode emulation)
只模拟 CPU,不模拟外设,主要用于直接运行不同架构的用户态程序,速度快,但不能跑完整操作系统。 -
系统模式仿真(System-mode emulation)
模拟整台计算机(CPU、内存、硬盘、网卡等),可以运行内核态程序和完整系统,代价是性能需求和配置复杂度都更高。
下文将依次介绍。
🐳 2. Docker 下安装配置 QEMU
在Docker上安装配置QEMU属于QEMU的第一种玩法,QEMU官方提供现成镜像,只要运行依次QEMU官方镜像,Docker快就可以指定容器运行平台的架构。虽然知乎、CSDN 上已经有很多教程,但这些内容要么收费要么过时,所以这里重新整理一份。
⚙️ 2.1 安装并配置 Docker
Docker 是一个开源的应用容器引擎,允许开发者将应用和依赖打包成标准化镜像,在任何地方快速部署运行。
安装配置方法参考:
⚡ Linux 安装与配置 Docker_debian docker-CSDN博客
📦 2.2 运行 QEMU 官方镜像
执行以下命令运行 QEMU 官方的多架构支持镜像:
sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
如果你的 Docker 和网络没问题,可能会看到:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
exec /register: exec format error
这段WARNING的意思是你的宿主机是 arm64(aarch64) 架构,但QEMU 官方这个镜像只支持 amd64(x86_64) 架构,所以后续模拟会失败。这里的exec format error 跟之前QEMU简介里的报错是同一个意思:架构不匹配,二进制文件无法执行
我一开始没在意这个 WARNING,因为我平时跑程序只要不 ERROR 就接着跑。结果后面所有容器都
exec format error,我还以为是没开experimental: true,但开了之后 Docker 直接连网都连不上。后来调查结果是我的 Docker 版本比较新本来就不需要开这个参数。于是我又怀疑是我命令输错,但是对着网上那些步骤敲了好几遍还是一样。最后去找QEMU官方镜像的git代码仓,其中的README中明确写道,官方这个 QEMU Docker 镜像根本不支持 arm64架构(见下图)

🏗️ 2.3 指定 Docker 架构运行其他容器
如果 QEMU 镜像没配置成功,继续运行其他架构的Docker容器,依然会报 exec format error。比如运行 Debian amd64 架构:
docker run --rm -it --platform linux/amd64 --name x86compiler -v ~/x86home:/home debian:bookworm bash
exec /usr/bin/bash: exec format error
所以,在 arm64 上模拟 x86_64,必须用 QEMU 的 第二种玩法。
💽 3. 安装完整的 QEMU 程序
这种方式安装的是 QEMU 系统模式,程序体积大约 3-5 GB(不含镜像文件)。它能模拟一整台计算机,包括 CPU、内存、网卡、硬盘,可运行内核态程序。
缺点是命令行配置较复杂,CPU、网卡、硬盘等都要手动配置,适合熟悉 Linux 系统的人。
📥 3.1 安装并配置 Git
Git 是目前最流行的分布式版本控制系统,可高效管理各种规模的项目。
安装配置方法参考:
⚡️ Linux 系统安装与配置 Git_linux git 配置-CSDN博客
📂 3.2 克隆 QEMU 源码
选择一个合适的目录,开始克隆QEMU官方源码
git clone https://gitlab.com/qemu-project/qemu.git
🔄 3.3 子模块初始化
进入到QEMU代码仓开始初始化子模块
cd qemu
git submodule init
git submodule update --recursive
🛠️ 3.4 编译配置
如果没有什么特殊的需求,可以使用默认的configure配置编译参数,直接执行configure文件
./configure
如果缺少依赖,configure运行的过程中会报错,需要安装依赖后重新执行configure文件。
每次安装新依赖后,建议先清理再重新执行configure文件:
rm -rf build
./configure
⚒️ 3.5 编译源码
make -j$(nproc)
$(nproc) 会自动使用全部 CPU 核心。具体是几核可以通过lscpu命令查看。
如果你还想在编译时看片刷剧,可以手动减少线程数。
📦 3.6 安装 QEMU
sudo make install
安装完成后,/usr/local/bin 下会有多个 qemu 可执行文件,例如qemu-system-x86_64等等。
✅ 3.7 验证安装
以 Alpine 为例,先下载镜像
wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.1-x86_64.iso
然后创建虚拟硬盘
qemu-img create -f qcow2 alpine.img 2G
最后启动QEMU
qemu-system-x86_64 -m 512 \
-cdrom alpine-standard-3.19.1-x86_64.iso \
-boot d -hda alpine.img -nographic
不要管这些参数什么意思,照着输入就是了。反正是验证时起的临时系统,验证完自动销毁,你后面如果要用这个系统还得把这个系统持久化并重新配置。过程十分复杂,详见:
⚡ Linux QEMU 模拟器下 Alpine 环境搭建全流程-CSDN博客
第一次启动可能卡 3-5 分钟。
看到 login: 提示后,用 root 登录:
uname -m
若显示 x86_64,说明跨架构运行成功。
⚠️ 4. 注意事项
📡 4.1 Git 克隆报错
在克隆Git仓库的时候可能会报错:
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2)
...
这是由于网络不稳定或仓库太大导致 HTTP/2 连接断开。
解决方法可以修改git网络配置:
git config --global http.version HTTP/1.1
git config --global http.postBuffer 524288000
然后重新克隆。
🏗️ 4.2 .configure 缺少 Ninja
在执行configure文件的时候报错
The Meson build system requires ninja
解决方法安装ninja-build:
sudo apt install ninja-build
⚙️ 4.3 .configure 缺少 Meson
在执行configure文件的时候报错
meson: command not found
解决方法安装meson:
sudo apt install meson
📚 4.4 .configure 缺少 glib-2.0
在执行configure文件的时候报错
Run-time dependency glib-2.0 found: NO
解决方法安装安装libglib2.0库:
sudo apt install libglib2.0-dev
🧩 4.5 缺少 flex
在执行configure文件的时候报错
flex: command not found
解决方法安装flex:
sudo apt install flex
🧩 4.6 缺少 bison
在执行configure文件的时候报错
bison: command not found
解决方法安装bison:
sudo apt install bison
🖼️ 4.7 镜像启动卡死(图形界面问题)
在启动 QEMU 的时候如果没加 -nographic 参数,QEMU 会调用图形界面(X11/Wayland)。如果你用的终端没有图形界面(比如是SSH链接的)那么就会卡死。
一般我们都不会开桌面环境(浪费资源),所以需要加上-nographic。
⏳ 4.8 镜像启动卡死(其他问题)
一般 QEMU 正常首次启动会卡 3-5 分钟,卡 20 分钟以上基本凉了
原因我也不是很清楚,反正我是arm64架构的Debian发行版Linux系统,里面跑alpine不会卡死,跑Debian就直接卡死。个人怀疑是QEMU模拟的Debian和宿主机Debian在内核或硬件上起了冲突。当然也有可能是我的Linux系统资源不够。
安装与配置 QEMU&spm=1001.2101.3001.5002&articleId=150339636&d=1&t=3&u=e62bc6f4e7954747bdbbca92d6b127c8)
6869

被折叠的 条评论
为什么被折叠?



