⚡ Linux 系统(arm64位架构)安装与配置 QEMU

🚄 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 有两种主要玩法:

  1. 用户模式仿真(User-mode emulation)
    只模拟 CPU,不模拟外设,主要用于直接运行不同架构的用户态程序,速度快,但不能跑完整操作系统。

  2. 系统模式仿真(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系统资源不够。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值