RISCV基础开发(四)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2021年8月15日14:28:40 评论 1,400

SBI规范

1. 简介

SBI的全称为Supervisor Binary Interface,是m模式下的服务对上提供的统一接口。比如设置timer、发送核间中断等,这些服务通过SBI接口进行封装,这样运行在s模式下的操作系统就可以在不同的平台上通过SBI这个统一的接口来使用一些底层服务,降低移植工作量,这个设计就有点像x86上的BIOS提供的中断服务,如下图所示。

RISCV基础开发(四)

同时RISCV基金会也提供了一套开源的实现,叫做OpenSBI,目前支持qemu virt、k210等几个riscv平台。RISCV芯片厂商一般也都会提供支持其芯片的OpenSBI移植源码,比如全志D1芯片等。

2. 调用规则

SBI接口通过“ecall”指令发起调用,然后进入m模式处理。SBI通过EID和FID来确定一个唯一的服务,这两个ID都为32位有符号整数。EID全称为SBI extension ID,其作用类似Linux下的系统调用号,表示SBI的某一组服务,如下图所示。

RISCV基础开发(四)

EID的值通过a7来保存。FID的全称为SBI function ID,表示某一组SBI服务中提供的具体功能,比如EID 0x10,FID 0x4  表示获取芯片厂商ID,如下图所示。

RISCV基础开发(四)

FID通过a6来保存,SBI服务调用结果通过a0和a1来返回,a0保存调用的错误码,比如成功还是失败之类,a1用来保存具体的返回值,错误码如下图所示。

RISCV基础开发(四)

3. 使用服务

一般像Linux这样的操作系统都会将SBI调用封装好,并提供相应的函数接口给内核开发者使用,SylixOS也类似,SylixOS通过sbi.h来提供SBI的服务调用接口,如下图所示。

RISCV基础开发(四)

通过这些接口我们可以很方便的使用硬件底层功能,比如想通过串口打印调试,通过“sbi_console_putchar”接口就可以直接输出字符。

gewenbin
  • 本文由 发表于 2021年8月15日14:28:40
  • 转载请务必保留本文链接:http://www.databusworld.cn/10507.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: