qemu 中文文档 下载 App

RISC-V 模拟从零搭建开发环境

RISC-V 与 QEMU

RISC-V 是开源精简指令集架构,快速流行于嵌入式、IoT、学术研究领域。QEMU 对 RISC-V 支持非常完整,系统级和用户态模拟都能跑。

QEMU 10.x+ 对 RISC-V 的模拟日趋成熟:支持 RV64(64 位)、RV32(32 位)、IMAFDC 标准扩展、以及虚拟化扩展(H)。

两种 RISC-V 板卡

板卡说明推荐场景
virtQEMU 虚拟 RISC-V 服务器板跑完整 Linux 发行版,通用推荐
sifive_eSiFive 虚拟开发板嵌入式、RTOS 开发

大多数人用 -M virt,设备覆盖最广。

模拟 RISC-V Linux(virt 板)

方式一:直接引导内核(推荐)

准备:

qemu-system-riscv64 \
  -M virt \
  -m 4G \
  -cpu max \
  -kernel vmlinuz-riscv64 \
  -initrd initrd-riscv64 \
  -drive file=rootfs-riscv.qcow2,format=qcow2,if=virtio \
  -append "root=/dev/vda1 console=ttyS0" \
  -netdev user,id=n0,hostfwd=tcp::2223-:22 \
  -device virtio-net-pci,netdev=n0 \
  -nographic

关键差异(对比 ARM 模拟):

方式二:走 OpenSBI + U-Boot 引导(传统方式)

RISC-V 规范里,OpenSBI(Open Source Supervisor Binary Interface)是引导链的第一阶段:

OpenSBI → U-Boot → Linux Kernel

QEMU 已经内置了 OpenSBI(-bios default 或 -bios /path/to/opensbi.elf),然后引导 U-Boot。这种方式更接近真实硬件,但调试引导链复杂。直接用 -kernel 跳过最简单。

发行版 ISO 引导

qemu-system-riscv64 \
  -M virt -m 8G -cpu max \
  -bios default \
  -cdrom ubuntu-24.04-live-server-riscv64.iso \
  -drive file=rootfs-riscv.qcow2,format=qcow2,if=virtio \
  -nic user,hostfwd=tcp::2223-:22 \
  -nographic

用户态 RISC-V 模拟

不需要完整系统,跑单个二进制:

# 安装
sudo apt install qemu-user

# 模拟运行 RISC-V 编译的 hello world
qemu-riscv64 ./riscv-hello

# 带根文件系统(完整用户环境)
qemu-riscv64-L /opt/riscv-rootfs ./my-riscv-app

用户态模拟非常轻量,速度是全系统模拟的 5~10 倍。适合快速验证 RISC-V 编译产物。

GDB 调试 RISC-V 内核

# QEMU 侧
qemu-system-riscv64 \
  -M virt -m 4G -smp 4 \
  -kernel vmlinuz -initrd initrd \
  -drive file=rootfs.qcow2,format=qcow2 \
  -append "root=/dev/vda1 nokaslr console=ttyS0" \
  -s -S \
  -nographic

# GDB 侧
riscv64-unknown-elf-gdb vmlinux
(gdb) target remote :1234

SiFive 开发板模拟

如果需要模拟更接近真实硬件的环境:

qemu-system-riscv64 \
  -M sifive_e \
  -m 2G \
  -nographic

SiFive E 系列是经典的 RISC-V 开发板模拟,常用于 rCore 等 OS 课程。

RISC-V 虚拟化扩展(H 扩展)

QEMU 10.x 开始更好地支持 RISC-V H 扩展(硬件虚拟化)。配置 Guest 时开启:

qemu-system-riscv64 \
  -M virt \
  -cpu max,virt=on \
  ...

交叉编译 + QEMU 验证的工作流

典型的嵌入式开发工作流:

# 1. 交叉编译 RISC-V 内核
riscv64-linux-gnu-make ARCH=riscv

# 2. 打包 rootfs
...

# 3. 启动 QEMU 系统模拟验证
qemu-system-riscv64 -M virt -kernel vmlinuz ... -nographic

# 4. 内核调试
qemu-system-riscv64 -M virt -s -S ...
riscv64-unknown-elf-gdb vmlinux

下一步

RISC-V 搞定了?继续看 用户态模拟深入 或跳到 VM 管理与热迁移。