26.6 QEMU 安装 RISC-V FreeBSD(基于 x86 Windows 主机)
QEMU(Quick Emulator)是一款基于纯软件模拟的开源虚拟机监视器(VMM,Virtual Machine Monitor)。
本节实验环境基于 Windows 11 24H2(宿主机,x86-64 架构)、FreeBSD 14.2-RELEASE(虚拟机,RISC-V 架构)以及 QEMU 20241220,所有操作步骤均在此环境下验证。
26.6.1 QEMU
首先需要下载并安装 QEMU 虚拟机软件。
QEMU 下载地址:
QEMU Binaries for Windows (64 bit),请下载列表中最新的安装程序。本节撰写时,最新版本为 qemu-w64-setup-20241220.exe,大小为 174 MB。
下载后在 Windows 上安装 QEMU。
26.6.2 RISC-V FreeBSD 磁盘镜像
QEMU 安装完成后,需要下载 RISC-V 架构的 FreeBSD 磁盘镜像。
RISC-V FreeBSD 磁盘镜像(以 FreeBSD 14.2-RELEASE 为例):
下载后解压缩备用。
26.6.3 相关文件结构
安装完成后,相关文件分布在以下目录结构中。
/usr/
└── local/
└── share/
├── opensbi/
│ └── lp64/
│ └── generic/
│ └── firmware/
│ └── fw_jump.elf # OpenSBI 固件
└── u-boot/
└── u-boot-qemu-riscv64/
└── u-boot.bin # U-Boot 引导加载程序26.6.4 OpenSBI
获取 OpenSBI(RISC-V Open Source Supervisor Binary Interface),其功能类似于启动固件。
26.6.4.1 安装 OpenSBI
使用 pkg 安装:
# pkg install opensbi或者使用 Ports 安装:
# cd /usr/ports/sysutils/opensbi/
# make install clean26.6.4.2 提取 fw_jump.elf
# /etc/periodic/weekly/310.locate # 刷新 locate 数据库
# locate fw_jump.elf
/usr/local/share/opensbi/lp64/generic/firmware/fw_jump.elf提取 fw_jump.elf 到 Windows 下备用。
26.6.5 U-Boot
在 FreeBSD 系统中获取 U-Boot(Universal Boot Loader),其功能类似于 GRUB 2。
26.6.5.1 安装 U-Boot
使用 pkg 安装:
# pkg install u-boot-qemu-riscv64或者使用 Ports 安装:
# cd /usr/ports/sysutils/u-boot-qemu-riscv64/
# make install clean26.6.5.2 提取 u-boot.bin 文件
# /etc/periodic/weekly/310.locate # 刷新数据库
# locate u-boot.bin
/usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin提取 u-boot.bin 到 Windows 下备用。
26.6.6 配置 QEMU
在桌面新建一个文本文件 qemu.bat,写入以下内容:
cd /d "C:\Program Files\qemu"
.\qemu-system-riscv64.exe ^
-machine virt ^
-smp 4 ^
-cpu rv64 ^
-m 4G ^
-device virtio-blk-device,drive=hd ^
-drive file="C:\Users\ykla\Desktop\FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw",if=none,id=hd ^
-device virtio-net-device,netdev=net ^
-netdev user,id=net,hostfwd=tcp::8022-:22 ^
-bios "C:\Users\ykla\Desktop\fw_jump.elf" ^
-kernel "C:\Users\ykla\Desktop\u-boot.bin" ^
-append "root=LABEL=rootfs" ^
-nographic参数说明:
^在 Windows 批处理脚本中用作续行符,可将一条长命令拆成多行书写。smp为 CPU 数量cpu指定 CPU 架构m指定内存大小hostfwd=tcp::8022-:22将宿主机的 8022 端口转发至虚拟机的 22 端口(SSH)
以上示例中,请将 C:\Users\ykla\Desktop\ 替换为实际路径。
运行脚本。

输入用户名 root 后直接登录,默认无密码。
无论使用 PowerShell 还是 CMD,输出均会出现乱码(例如 ee 命令或按 Tab 键)。
此外,该镜像默认未为普通用户配置 SSH 服务,因此无法直接通过 SSH 连接 FreeBSD 设备。
26.6.7 创建普通用户(如没有)
先创建一个普通用户(注意加入 wheel 组):
技巧
本节示例中出现的用户名
ykla及路径/home/ykla均为示例,请根据自身需求替换为实际用户名和主目录。
# adduser
Username: ykla
Full name:
Uid (Leave empty for default):
Login group [ykla]:
Login group is ykla. Invite ykla into other groups? []: wheel # 注意:请在此处输入 wheel,否则该用户将无法使用 su 命令提升权限
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/ykla]:
Home directory permissions (Leave empty for default):
Enable ZFS encryption? (yes/no) [no]: Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : ykla
Password : *****
Full Name :
Uid : 1001
ZFS dataset : zroot/home/ykla
Class :
Groups : ykla wheel
Home : /home/ykla
Home Mode :
Shell : /bin/sh
Locked : no
OK? (yes/no) [yes]:
adduser: INFO: Successfully created ZFS dataset (zroot/home/ykla).
adduser: INFO: Successfully added (ykla) to the user database.
Add another user? (yes/no) [no]:
Goodbye!26.6.8 配置 sshd 服务
配置 sshd 服务如下:
# service sshd enable # 添加启动项
# service sshd start # 启动 sshd 服务此后即可在 Windows 上通过 SSH 连接(IP 为 localhost):
ssh -p 8022 ykla@localhost即可使用端口 8022(由文件 qemu.bat 指定)通过 SSH 连接到本地主机的 ykla 用户。
26.6.9 故障排除与未竟事宜
26.6.9.1 无法显示图形界面
待解决。
26.6.10 参考文献
- zg. Create FreeBSD virtual machine using qemu. Run the VM using xhyve.[EB/OL]. [2026-03-26]. https://gist.github.com/zg/38a3afa112ddf7de4912aafc249ec82f. 提供了 QEMU 下 FreeBSD 虚拟机扩容的技术方法。
- Nativus. 在 QEMU for Windows x64 上搭建 RISC-V 环境(Debian Linux)[EB/OL]. (2022-10-12)[2026-03-26]. https://naiv.fun/Ops/83.html. 提供了 RISC-V 环境搭建的概念解释与整体框架。
- smist08. RISC-V Emulation Revisited[EB/OL]. (2023-04-28)[2026-03-26]. https://smist08.wordpress.com/2023/04/28/risc-v-emulation-revisited. 详细介绍了 QEMU 中 RISC-V 虚拟化的各种配置参数与实现细节。