QEMU运行RVV

Jiaolong...大约 3 分钟RISC-V

本实验基于Ubuntu 18.04,由于20.04有些问题难以解决,暂不采用,20.04 LTS未进行测试

由于目前较少硬件平台能够支持RISC-V向量指令集,为了更好的探索RISC-V的生态,所以选择模拟器上进行测试。目前常见的模拟RISC-V环境的有两种方式:Spike+p和QEMU。

Spike是专门的RISC-V指令模拟器,支持RISC-V各种模块的指令,(riscv-pk)是RISC-V的一个轻量级应用程序执行环境,但只能托管静态链接的RISC-V ELF二进制文件两个配合来加载运行RISC-V ELF二进制文件,目前只支持静态链接程序。

qemu是一个通用的、开源的机器仿真器和虚拟机。支持各种架构的指令模拟,如arm,aarch64,以及RISC-V。并且能支持静态链接和动态链接的程序。

由于在移植过程中,较多用到­linux-­gnu-­gcc进行交叉编译,使用QEMU能够很好的模拟RISCV的硬件资源,后期有实际的开发板后将其软件生态移植上去也并不复杂。

RISC-V工具链

主要有两个版本:

  • riscv64-­unknown-­elf-gcc:是使用newlib,主要用于静态编译的独立的程序或者单机嵌入式程序,RTOS等等。
  • riscv64-unknown-­linux-­gnu-­gcc:使用的glibc,可以编译动态链接程序,例如大型操作系统如Linux等等。暂时采用此版本

仿真环境

  • Spike + PK:Spike是专门的RISC-V指令模拟器,支持RISC-V各种模块的指令,而且也有debug模式。RISC-V Proxy Kernel(riscv-pk)是RISC-V的一个轻量级应用程序执行环境,可以托管静态链接的RISC-V ELF二进制文件。可以把spike理解为模拟硬件,pk理解为操作系统,两个配合来加载运行RISC-V ELF二进制文件。只支持静态链接程序。
  • qemu是一个通用的、开源的机器仿真器和虚拟机。qemu支持各种架构的指令模拟,如arm,aarch64,以及RISC-V。qemu-riscv是支持静态链接和动态链接的程序的

PK是只能加载静态链接的RISCV ELF文件的,即只能使用riscv64-­unknown-­elf-gcc进行编译。而很多在移植中需要使用­linux-­gnu-­gcc进行交叉编译。所以采用qemu进行环境模拟。

QEMU

两种启动模式

  • riscv-64-linux-user为用户模式,可以运行基于riscv指令集编译的程序文件(target-list=riscv64-linux-user)
  • riscv64-softmmu为镜像模拟器,可以运行基于riscv指令集编译的linux镜像(target-list=riscv64-softmmu)

为了便于测试,这里采用用户模式进行测试。

QEMU默认是不支持RVV的,在仿真时需使用命令

-cpu rv64,v=true,vlen=256,vext_spec=v1.0 -L

开启支持。

/home/jiaolong/riscvv/qemu-7.1.0/build/riscv64-linux-user/qemu-riscv64 -cpu rv64,v=true,vlen=256,vext_spec=v1.0 -L $RISCV/sysroot /home/jiaolong/riscvv/test/rvv_vadd