qemu工具构建编译

背景

在arm64主机编译使能kvm模式的qemu工具,并用于openubmc镜像运行可以显著提升运行效率。

本文记录了如何在arm64主机上编译qemu-system-aarch64工具。

  • arm64工具已上传到社区工具仓,一般情况用户无需手动构建和安装,请使用bingo qemu命令自动安装、运行qemu。

拉取Docker镜像

docker pull docker.1ms.run/library/ubuntu:24.04
# 如果拉取的不是arm64版本镜像,可以执行下面的命令指定架构
docker pull --platform=linux/arm64 docker.1ms.run/library/ubuntu:24.04

运行镜像

docker run -itd --name xuhj -v /Users/xuhaijun/workspace/qemu/:/home/workspace docker.1ms.run/library/ubuntu:24.04 /bin/bash
# 如果在kunpeng处理器上运行,检查 /dev/kvm存在的,可以使用--device命令映射,实现kvm加速

docker run -itd --name xuhj --device /dev/kvm:/dev/kvm -v /home/xuhj/workspace/qemu/:/home/workspace docker.1ms.run/library/ubuntu:24.04 /bin/bash

更新APT软件源

# 更新apt软件源
sed -i 's/ports.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list.d/ubuntu.sources

安装依赖

apt install -y gcc g++ python3 python3-pip pkgconf ninja-build libfdt-dev libglib2.0-dev libpixman-1-dev python3-jsonschema wget unzip cpio libslirp-dev  python3 vim git
# 更新pypi软件源
pip config --user set global.index https://mirrors.huaweicloud.com/repository/pypi
pip config --user set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple
pip config --user set global.trusted-host mirrors.huaweicloud.com
pip config --user set global.extra-index-url https://pypi.org/simple

编译工具

git clone https://gitcode.com/openubmc/qemu.git
cd qemu
mkdir build
cd build
../configure --target-list=aarch64-softmmu --enable-kvm --disable-docs --disable-werror --enable-slirp
ninja -j"$(nproc)" qemu-system-aarch64
# 可选strip减少包大小
strip -s qemu-system-aarch64

部署到环境上

生成的qemu-system-aarch64工具可以安装到/usr/bin目录下,重命令为qemu-system-aarch64-release并添加可执行权限。

bingo qemu在运行时会首先检查系统是否已经存在qemu-system-aarch64-release工具,如果存在则不会下载,不存在时会从repo.openubmc.cn网站下载工具。