2.1 实验平台
2.1.1 QEMU
QEMU Virt实验平台(QEMU模拟器中内置的一块虚拟开发板)模拟的是一款通用的RISC-V开发板,包括内存布局、中断分配、CPU配置、时钟配置等信息,这些信息目前都在QEMU的源代码中实现,具体文件是qemu/hw/riscv/virt.c。QEMU Virt实验平台具有如下硬件特性。
● 最多支持8个RV32GC/RV64GC通用处理器内核。
● 支持CLINT。
● 支持平台级别的中断控制器。
● 支持NOR Flash存储器。
● 支持兼容NS16550的串口。
● 支持RTC。
● 支持8个VirtIO-MMIO传输设备。
● 支持1个PCIe主机桥接设备。
● 支持fw_cfg,用于从QEMU获取固件配置信息。
QEMU Virt开发板的地址空间布局如表2.1所示。
表2.1 QEMU Virt开发板的地址空间布局
QEMU Virt模拟的开发板的中断号分配如表2.2所示。
表2.2 QEMU Virt模拟的开发板的中断号分配
2.1.2 NEMU
NEMU(NJU Emulator)最早是由南京大学实现的一个用于教学的计算机指令集体系结构(Instruction Set Architecture,ISA)模拟器,香山处理器团队基于2019版的NEMU进行了增强和维护,以模拟香山处理器前期指令集和体系结构。本章把NEMU简称为香山模拟器。NEMU支持x86、RV32和RV64等指令集体系结构。
RV64版本NEMU具有如下硬件特性。
● 支持1个RV64GC通用处理器内核。
● 支持CLINT。
● 支持NOR Flash存储器。
● 支持兼容NS16550的串口。
● 支持Xilinx UartLite串口控制器。
● 支持RTC。
● 支持单步调试。
RV64版本的NEMU Virt开发板的地址空间布局如表2.3所示。
表2.3 NEMU Virt开发板的地址空间布局
表2.3中的信息都可以在NEMU的Configure菜单中配置。
使用NEMU之前需要自行编译。
$ sudo apt install libsdl2-dev libreadline-dev
$ git clone https://github.com/runninglinuxkernel/NEMU.git
$ cd NEMU
$ export NEMU_HOME=$(pwd)
$ make riscv64-benos_defconfig
$ make -j$(nproc)
$ sudo cp build/riscv64-nemu-interpreter /usr/local/bin