社区活动专版
直播中

winter91

14年用户 23经验值
擅长:47504
私信 关注

【「RISC-V体系结构编程与实践」阅读体验】-- SBI及NEMU环境

基于《RISC-V体系结构编程与实践(第二版)》这本书籍,官方文档及网上资料继续我的RISC-V旅程。
接前面的篇章,今天来看看RISCV-V的SBI、BenOS和MySBI及NEMU环境。

SBI

SBI:(Supervisor Binary Interface)
在RISC-V软件生态中,RISC-V规范定义了一个SBI规范。SBI对所有RISC-V硬件平台共性的功能做了抽象,为运行在S模式下的操作系统或者虚拟机监控程序扩展的特权(Hypervisor- extended Supervisor, HS)模式的虚拟化管理软件提供统一的服务接口。
通常把提供SBI服务的固件称为SBI固件,现在业界流行的SBI固件有OpenSBI等。4.jpg

BenOS和MySBI

书中大部分实验是以BenOS为基础,BenOS 基础实验代码包含MySBI和BenOS两部分,其中MySBI是运行在M模式下的固件,运行在S模式下的操作系统提供引导和统一的接口服务。

本书的实验并没有采用业界流行的OpenSBI固件,而是从零开始编写一个小型可用的SBI固件,以便从底层深入学习RISC-V体系结构。
系统上电后,RISCV处理器运行在M模式下。通常SBI固件运行在M模式下,为运行在S模式下的操作系统提供引导服务以及SBI服务。不过本小节介绍的MySBI代码仅仅提供引导服务,在后续的实验中会逐步添加SBI服务。

我觉得这也是本书的一个亮点,从最底层最简单的裸机开始,一步步对其扩展和完善,而不是直接从OpenSBI开始,这样更容易理解底层的一些细节。

NEMU环境介绍及搭建

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具有如下硬件特性:

  • 支持1个RV64GC通用处理器内核。
  • 支持 CLINT。
  • 支持NOR Flash存储器。
  • 支持兼容NS16550的串口。
  • 支持Xilinx UartLite串口控制器。
  • 支持RTC。
  • 支持单步调试。3.png

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/

Hello World

编译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

更多回帖

发帖
×
20
完善资料,
赚取积分