特权层二进制接口

特权层二进制接口是RISC-V架构下引导程序环境的规范。它提供了特权层的运行环境，使得特权层软件能使用环境调用指令，来执行平台相关的操作。典型的的特权层接口应用有：一、类似于Unix的操作系统中，机器级和特权级的访问接口；二、监视特权级和虚拟特权级中，作为虚拟化环境的调用接口。

特权层二进制接口的全文收录于此链接 。

功能模块  

特权层接口规范定义了以下的模块。
 基础模块：包含探测支持的SBI功能、得到SBI版本和得到机器版本等部分；
 时钟中断模块：设置下一个时钟中断的发生时间；
 跨核软中断模块：发送跨处理核的软件中断；
 远程栅栏模块：跨处理核发送栅栏指令，包括指令栅栏、内存映射栅栏和虚拟机栅栏指令等；
 核状态模块：启动、停止和暂停一个处理核，以及读取处理核的当前状态；
 复位模块：重启或关闭系统。

其中，基础模块是必须要求实现的模块，其它模块都是可选实现的模块。

旧扩展模块 

当特权层接口规范支持陈旧扩展时，包含以下的模块。
 旧扩展模块：包含控制台输入输出等。

旧扩展模块的大多数功能，都在新的功能模块中有替代选项。如果可能，尽量使用分别列出的新版功能模块。

预留模块部分 

这些模块包括实验性模块、制造商定义模块和固件定义模块。

特权层接口规范为制造商预留了定义功能模块的空间，通常上，这些空间可以与mvendorid寄存器的内容对应。
每个特权层接口实现编号，都可以拥有自己的固件定义模块，这部分实现根据不同的具体固件而不同。

使用预留模块时需要注意：并非所有的SBI实现、制造商都提供此类模块和它的函数。操作系统软件需要结合特定的特权层接口实现，编写预留模块的支持部分。

软件实现 

目前流行的特权层接口实现软件实现有以下几种。

 伯克利引导程序（BBL）
 OpenSBI
 Xvisor
 KVM
 RustSBI
 Diosix
 Coffer

參考文獻 

使用创建条目精灵建立的页面
指令集架構