基于Qemu的RISC-V实验平台

现在越来越多的公司开始关注和使用RISC-V,或者已经有一些公司开始把RISC-V集成到自己的芯片中,但是市面上还是缺乏一款优秀的RISC-V开发板,既能满足软件开发验证使用,又能提供丰富的学习例程。

在无RISC-V开发板的情况下,为了能够学习验证RISC-V相关的代码,通过Qemu模拟器搭建RISC-V运行环境,这样也能完全达到实验学习的目的。

下载编译工具

1
2
3
4
5
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.10.18/riscv32-glibc-ubuntu-20.04-gcc-nightly-2023.10.18-nightly.tar.gz
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.10.18/riscv64-glibc-ubuntu-20.04-gcc-nightly-2023.10.18-nightly.tar.gz

tar -xzf riscv32-glibc-ubuntu-20.04-gcc-nightly-2023.10.18-nightly.tar.gz -C /path/to/directory

打开~/.bashrc后在文件末尾添加如下命令:

1
export PATH=$PATH:/path/to/riscv32/bin

保存之后,同步修改:

1
2
source ~/.bashrc
riscv32-unknown-linux-gnu-gcc --version

carbon

Qemu构建

1
2
3
4
5
6
7
git clone -b qemu-v7.2.0 https://github.com/chasinglulu/qemu.git
cd qemu
./configure --target-list=aarch64-softmmu,riscv64-softmmu,riscv32-softmmu --enable-fdt --disable-kvm --disable-xen --enable-gcrypt
make -j64

cd build
./qemu-system-riscv32 --version

qemu-system-riscv32-version

OpenSBI构建

1
2
3
4
git clone https://github.com/chasinglulu/opensbi.git

export CROSS_COMPILE=riscv32-unknown-linux-gnu-
make PLATFORM=generic

更多关于OpenSBI的构建说明,参考OpenSBI README

U-Boot构建

首先要将/path/to/opensbi/build/platform/generic/firmware目录下fw_dynamic.bin文件复制到u-boot源代码目录下,在编译时binman会使用这个bin文件打包出一个u-boot.itb。

1
2
3
4
git clone -b hobot-uboot https://github.com/chasinglulu/u-boot.git
cd u-boot
make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- qemu-riscv32_spl_defconfig
make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- -j4

运行调试

启动顺序

What is SBI

图1 SBI介绍

riscv bootflow

图2 RISC-V启动流

启动案例

1
qemu-system-riscv32 -M virt -smp 4 -m 2G -display none -serial stdio -bios /path/to/u-boot/spl/u-boot-spl.bin -device loader,file=/path/to/u-boot/u-boot.itb,addr=0x80200000

运行输出日志如下:
carbon

参考资料

  1. RISC-V BootFlow