如何在 Windows 10/11 上构建 QEMU
本文中的 QEMU 均指由 PolyOS 社区提供和维护的 QEMU。
当需要提及 QEMU 的原始(上游)分发版本时,本文将称之为 “上游 QEMU”。
在本文中我们将帮助您在 Windows 10/11 上构建由 PolyOS 社区提供和维护的 QEMU ,它为 PolyOS 移动操作系统的开发和测试提供了必要的虚拟化环境。借助 MSYS2 环境,您可以轻松地配置和编译 QEMU。通过安装 MSYS2、获取 QEMU 源码、配置编译选项以及进行编译,您可以获得一个功能强大的 QEMU 虚拟机,用于运行和测试 PolyOS。通过本文您不仅能在 Windows 平台上建立起 PolyOS 和 QEMU 的开发环境,也能进一步了解一些虚拟化技术的细节。
MSYS2
MSYS2 是一个在 Windows 平台上提供类似于 Unix 环境的软件包管理系统和开发工具集。它为 Windows 用户提供了强大的命令行工具和开发环境,使其可以更轻松地在 Windows 上构建和运行类 Unix 的软件。我们通过它帮助您在 Windows 10/11 上轻松的安装 GNU 工具链,并获得一个 MinGW64 环境。
MSYS2 和 MinGW-w64 的关系
MSYS2 和 MinGW-w64 是紧密相关的项目,它们共同构成了 MSYS2 环境。
- MSYS2:提供了 Unix-Like 的 shell 环境和软件包管理器,用于在 Windows 上构建类 Unix 的软件。
- MinGW-w64:是一个在 Windows 上支持 64 位和 32 位目标的开发工具集,包括 GCC 编译器、Make 构建工具等,用于编译和运行 C/C++ 程序。
或者,您也可以将 MSYS2 理解为 MinGW64、MinGW32、Clang、URCT64 等工具集的管理工具。
安装 MSYS2
安装 MSYS2 非常简单,您只需按照以下步骤进行:
- 打开 https://www.msys2.org/ 点击 msys2-x86_64-20230526.exe (通常为 msys2-x8664-_date.exe) 按钮获取
exe
格式的安装包进行安装。 - 运行安装程序,并选择安装目录和其他设置。
- 完成安装后,启动 MSYS2 终端。
- 之后我们将在这个终端中,使用
pacman
包管理器安装所需的开发工具和软件包。
构建环境
QEMU 使用 GNU Build System (GNU autotools) 和 meson
进行构建,所以我们需要准备一个包含 GNU Build System、GCC 工具链以及 QEMU 依赖的环境来进行实际构建。此外,由于 PolyOS 社区 QEMU 的源代码托管在 Gitee 上的一个 Git 仓库中,您也需要确保具有 Git 工具来获取源代码
配置 GCC 工具链
您需要在 MSYS2 终端中执行 pacman
的安装指令。
pacman -Sy mingw-w64-x86_64-toolchain
安装 QEMU 构建依赖
您需要确保下列依赖被成功安装。
pacman -Sy mingw-w64-x86_64-meson mingw-w64-x86_64-ninja \
mingw-w64-x86_64-python \
mingw-w64-x86_64-python-sphinx \
mingw-w64-x86_64-python-sphinx_rtd_theme \
mingw-w64-x86_64-autotools \
mingw-w64-x86_64-tools-git \
mingw-w64-x86_64-cc \
mingw-w64-x86_64-angleproject \
mingw-w64-x86_64-capstone \
mingw-w64-x86_64-curl \
mingw-w64-x86_64-cyrus-sasl \
mingw-w64-x86_64-expat \
mingw-w64-x86_64-fontconfig \
mingw-w64-x86_64-freetype \
mingw-w64-x86_64-fribidi \
mingw-w64-x86_64-gcc-libs \
mingw-w64-x86_64-gdk-pixbuf2 \
mingw-w64-x86_64-gettext \
mingw-w64-x86_64-glib2 \
mingw-w64-x86_64-gmp \
mingw-w64-x86_64-gnutls \
mingw-w64-x86_64-graphite2 \
mingw-w64-x86_64-gst-plugins-base \
mingw-w64-x86_64-gstreamer \
mingw-w64-x86_64-gtk3 \
mingw-w64-x86_64-harfbuzz \
mingw-w64-x86_64-jbigkit \
mingw-w64-x86_64-lerc \
mingw-w64-x86_64-libc++ \
mingw-w64-x86_64-libdatrie \
mingw-w64-x86_64-libdeflate \
mingw-w64-x86_64-libepoxy \
mingw-w64-x86_64-libffi \
mingw-w64-x86_64-libiconv \
mingw-w64-x86_64-libidn2 \
mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-libnfs \
mingw-w64-x86_64-libpng \
mingw-w64-x86_64-libpsl \
mingw-w64-x86_64-libslirp \
mingw-w64-x86_64-libssh \
mingw-w64-x86_64-libssh2 \
mingw-w64-x86_64-libtasn1 \
mingw-w64-x86_64-libthai \
mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-libunistring \
mingw-w64-x86_64-libunwind \
mingw-w64-x86_64-libusb \
mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-libwinpthread-git \
mingw-w64-x86_64-lz4 \
mingw-w64-x86_64-lzo2 \
mingw-w64-x86_64-nettle \
mingw-w64-x86_64-openssl \
mingw-w64-x86_64-opus \
mingw-w64-x86_64-orc \
mingw-w64-x86_64-p11-kit \
mingw-w64-x86_64-pango \
mingw-w64-x86_64-pixman \
mingw-w64-x86_64-SDL2 \
mingw-w64-x86_64-SDL2_image \
mingw-w64-x86_64-snappy \
mingw-w64-x86_64-spice \
mingw-w64-x86_64-usbredir \
mingw-w64-x86_64-xz \
mingw-w64-x86_64-zlib \
mingw-w64-x86_64-zstd
(可选)安装 Git
如果您需要安装 Git,此节将帮助你获取最新版本的 Git 工具。
我们推荐您从 [git 官网下载页面] 上获取最新版本的 Git,此外,如果您偏好使用 winget
工具,您也可以通过在 Powershell 中运行命令进行 Git 的安装。
winget install -e --id Git.Git
获取 QEMU (by PolyOS 社区) 的源码
在开始菜单或桌面上找到 MSYS2 MinGW 64 快捷方式,右击选择打开一个具备管理员权限的 MinGW64 终端,使用 git
来检出 QEMU 仓库。
您需要确保该终端是 MinGW64 环境,而不是其他环境(MinGW32、Clang32/64、UCRT64 等)。
您也可以在一个管理员权限的 Powershell 中简单的使用下列命令来切换到 MinGW64 环境。
C:/msys64/msys2_shell.cmd -defterm -here -no-start -mingw64
如果您没有将 MSYS2 安装至默认位置,您需要替换 C:/msys64/msys2_shell.cmd
为正确的路径
git clone https://gitee.com/TODO-REVIEW-FIXME
配置 QEMU 编译选项
我们预期构建一个支持 GTK、SDL,目标平台为 riscv64
的 QEMU 仿真器。所以我们只需要提供简单的配置即可获得我们需要的仿真环境,如果您需要获取更丰富的支持,请阅读 高级选项和定制 。
首先,您需要导航至 QEMU 的源码目录,创建一个用于存储构建缓存的目录 build
。
cd /path/to/qemu
mkdir build && cd build
接下来,我们运行 configure
脚本来生成适合我们需求的 Makefile。
../configure --target-list=riscv64-softmmu \
--enable-sdl --enable-gtk \
--disable-werror \
--prefix="$USERPROFILE"/bin
我们通过 --target-list=riscv64-softmmu
生成指定架构(riscv64
)的仿真器,通过 --enable-sdl
和 --enable-gtk
启用 SDL 和 GTK 支持,并指定在执行安装时将 QEMU 安装到用户目录下的 bin 目录,例如:C:\Users\polyos\bin
。
编译 QEMU
我们只需要执行 make
即可完成构建。
make
您可以通过多线程构建来减少 make
的执行时间。
安装 QEMU
简单的执行 make install
后,QEMU 仿真器将会被安装到 %USERPROFILE%\bin
下。
您可以将 %USERPROFILE%\bin
追加至环境变量 PATH
的开头,以将其作为默认的仿真器。
运行 QEMU
您可以通过 PolyOS 的启动脚本来使用您构建运行的 QEMU。
Set-ExecutionPolicy Bypass -Scope Process -Force;
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://polyos.iscas.ac.cn/scirpts/qemu-launcher.ps1')) --Arg1 updater.img --Arg2 system.img --Arg3 vendor.img --Arg4 userdata.img --Kernel kernel --Initrd initrd.gz
或者,也可以手动执行 qemu-system-riscv64.exe
。
C:/msys64/msys2_shell.cmd -defterm -here -no-start -mingw64 %USERPROFILE%\bin\qemu-system-riscv64.exe -- # 加入您的参数
高级选项和定制
待编写。
疑难解答
待捕获错误。