基于《RISC-V体系结构编程与实践(第二版)》这本书籍,官方文档及网上资料继续我的RISC-V旅程。
接前面的篇章,今天来看看RISCV-V的SBI、BenOS和MySBI及NEMU环境。
SBI:(Supervisor Binary Interface)
在RISC-V软件生态中,RISC-V规范定义了一个SBI规范。SBI对所有RISC-V硬件平台共性的功能做了抽象,为运行在S模式下的操作系统或者虚拟机监控程序扩展的特权(Hypervisor- extended Supervisor, HS)模式的虚拟化管理软件提供统一的服务接口。
通常把提供SBI服务的固件称为SBI固件,现在业界流行的SBI固件有OpenSBI等。
书中大部分实验是以BenOS为基础,BenOS 基础实验代码包含MySBI和BenOS两部分,其中MySBI是运行在M模式下的固件,运行在S模式下的操作系统提供引导和统一的接口服务。
本书的实验并没有采用业界流行的OpenSBI固件,而是从零开始编写一个小型可用的SBI固件,以便从底层深入学习RISC-V体系结构。
系统上电后,RISCV处理器运行在M模式下。通常SBI固件运行在M模式下,为运行在S模式下的操作系统提供引导服务以及SBI服务。不过本小节介绍的MySBI代码仅仅提供引导服务,在后续的实验中会逐步添加SBI服务。
我觉得这也是本书的一个亮点,从最底层最简单的裸机开始,一步步对其扩展和完善,而不是直接从OpenSBI开始,这样更容易理解底层的一些细节。
RISCV-V的实验环境搭建,之前我自己已经搭建过QEMU的:《基于QEMU搭建RISC-V的Linux环境》https://mp.weixin.qq.com/s/F6lyqPhng21qsUlj2saShw
今天来看看书中介绍的NEMU。
NEMU (NJU Emulator)最早是由南京大学实现的一个用于教学的计算机指令集体系结构(Instruction Set Architecture,ISA)模拟器,香山处理器团队基于2019版的NEMU进行了增强和维护,以模拟香山处理器前期指令集和体系结构。本章把NEMU简称为香山模拟器。NEMU支持x86、RV32和RV64等指令集体系结构。
RV64版本NEMU具有如下硬件特性:
编译NEMU。
# 安装依赖
sudo apt install libsdl2-dev libreadline-dev
# 下载NEMU
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/
编译benos的Hello World
并运行。
# 安装相关工具
sudo apt install gcc-riscv64-linux-gnu
# 获取benos实验代码
git clone https://github.com/runninglinuxkernel/riscv_programming_practice.git
cd riscv_programming_practice/chapter_2/benos
# 编译
export board=nemu
make clean
make
# 运行
make run
NUME会输出 "Welcome RISC-V!"
欢迎关注我的公众号一起交流学习:https://notes.z-dd.online
更多回帖