3.8 使用 QEMU 在 x86 架构 Windows 主机上安装 RISC-V 架构的 FreeBSD

QEMU(Quick Emulator)是一款通过纯软件进行模拟的开源虚拟机监视器(VMM,Virtual Machine Monitor)。纯软件模拟指不依赖硬件虚拟化扩展,通过软件完全模拟处理器指令执行,支持多种处理器体系结构的模拟与跨架构执行,具有良好的兼容性与灵活性。

本文实验环境基于 Windows 11 24H2(宿主机,x86-64 架构)、FreeBSD 14.2-RELEASE(虚拟机,RISC-V 架构)以及 QEMU 20241220,所有操作步骤均在此环境下验证。

QEMU

首先需要下载并安装 QEMU 虚拟机软件。

QEMU 下载地址:

QEMU Binaries for Windows (64 bit)arrow-up-right,请下载列表中最新的安装程序。写作本文时,最新版本为 qemu-w64-setup-20241220.exe,大小为 174 MB。

下载后在 Windows 上安装 QEMU。

RISC-V FreeBSD 磁盘镜像

QEMU 安装完成后,需要下载 RISC-V 架构的 FreeBSD 磁盘镜像。

RISC-V FreeBSD 磁盘镜像(以 FreeBSD 14.2 RELEASE 为例):

https://download.freebsd.org/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xzarrow-up-right

下载后解压缩备用。

/usr/
└── local/
    └── share/
        ├── opensbi/
           └── lp64/
               └── generic/
                   └── firmware/
                       └── fw_jump.elf # OpenSBI 固件
        └── u-boot/
            └── u-boot-qemu-riscv64/
                └── u-boot.bin # U-Boot 引导加载器

OpenSBI

接下来需要获取 OpenSBI(RISC-V Open Source Supervisor Binary Interface),其功能类似于启动固件。

安装 OpenSBI

使用 pkg 安装

或者使用 Ports 安装:

提取 fw_jump.elf

提取 fw_jump.elf 到 Windows 下备用。

U-Boot

在 FreeBSD 系统中获取 U-Boot(Universal Boot Loader),其功能类似于 GRUB 2。

安装 U-Boot

使用 pkg 安装

或者使用 Ports 安装:

提取 u-boot.bin 文件

提取 u-boot.bin 到 Windows 下备用。

配置 QEMU

在桌面新建一个文本文件 qemu.bat,写入

参数说明:

  • ^ 在 Windows 批处理脚本中用作续行符,可将一条长命令拆成多行书写。

  • smp 为 CPU 数量

  • cpu 指定 CPU 架构

  • m 指定内存大小

  • hostfwd=tcp::8022-:22 将宿主机的 8022 端口转发至虚拟机的 22 端口(SSH)

以上示例中,请将 C:\Users\ykla\Desktop\ 替换为你自己的路径。

运行脚本即可。

Qemu 安装 FreeBSD

输入用户名 root 并回车即可登录,默认没有密码。

在 PowerShell 和 CMD 中运行都会产生乱码(例如 ee 命令或按 TAB 键)。

但该镜像默认没有为普通用户配置 SSH 服务,因此无法直接通过 SSH 连接 FreeBSD 设备。

创建普通用户(如没有)

先创建一个普通用户(注意加入 wheel 组):

配置 sshd 服务

配置 sshd 服务如下:

然后就可以在 Windows 上通过 ssh 连接了(IP 是 localhost):

即可使用端口 8022(由文件 qemu.bat 指定)通过 SSH 连接到本地主机的 ykla 用户。

故障排除与未竟事宜

无法显示图形界面

待解决

参考文献

课后习题

  1. 研究 OpenSBI 与 U-Boot 在 RISC-V 启动链中的职责划分,尝试移除其中一个组件并替换为简化实现,验证系统能否正常启动。

  2. 分析 QEMU 中 RISC-V 图形界面支持的技术障碍,研究 virtio-gpu 设备在 FreeBSD RISC-V 上的驱动状态,尝试配置基本的图形输出。

  3. 修改 QEMU 启动脚本中的 CPU 核心数与内存大小参数,对比不同配置下系统的启动时间与运行性能。

最后更新于