特权层二进制接口
此条目过于依赖第一手来源。 (2021年6月18日) |
特权层二进制接口是RISC-V架构下引导程序环境的规范[1]。它提供了特权层的运行环境,使得特权层软件能使用环境调用指令,来执行平台相关的操作。典型的的特权层接口应用有:一、类似于Unix的操作系统中,机器级和特权级的访问接口;二、监视特权级和虚拟特权级中,作为虚拟化环境的调用接口。
开发者 | RISC-V Unix工作组 |
---|---|
首次发布 | 2018年5月26日 |
当前版本 | 1.0.0(2022年3月23日) |
预览版本 | 1.0-rc3(2022年3月16日) |
平台 | RISC-V |
许可协议 | CC-BY-4.0 |
网站 | GitHub |
功能模块
特权层接口规范[2]定义了以下的模块。
- 基础模块:包含探测支持的SBI功能、得到SBI版本和得到机器版本等部分;
- 时钟中断模块:设置下一个时钟中断的发生时间;
- 跨核软中断模块:发送跨处理核的软件中断;
- 远程栅栏模块:跨处理核发送栅栏指令,包括指令栅栏、内存映射栅栏和虚拟机栅栏指令等;
- 核状态模块:启动、停止和暂停一个处理核,以及读取处理核的当前状态;
- 复位模块:重启或关闭系统。
其中,基础模块是必须要求实现的模块,其它模块都是可选实现的模块。
旧扩展模块
当特权层接口规范支持陈旧扩展时,包含以下的模块。
- 旧扩展模块:包含控制台输入输出等。
旧扩展模块的大多数功能,都在新的功能模块中有替代选项。如果可能,尽量使用分别列出的新版功能模块。
预留模块部分
这些模块包括实验性模块、制造商定义模块和固件定义模块。
特权层接口规范为制造商预留了定义功能模块的空间,通常上,这些空间可以与mvendorid寄存器的内容对应。 每个特权层接口实现编号,都可以拥有自己的固件定义模块,这部分实现根据不同的具体固件而不同。
使用预留模块时需要注意:并非所有的SBI实现、制造商都提供此类模块和它的函数。操作系统软件需要结合特定的特权层接口实现,编写预留模块的支持部分。
软件实现
目前流行的特权层接口实现软件实现有以下几种。
参考文献
- ^ RISC-V Community. RISC-V SBI 的GitHub仓库. [2021-06-04]. (原始内容存档于2021-03-09).
- ^ RISC-V Community. RISC-V SBI 规范正文. [2021-06-04]. (原始内容存档于2021-03-06).
- ^ OpenSBI GitHub. [2021-06-04]. (原始内容存档于2021-07-20).
- ^ RustSBI GitHub.
- ^ Diosix GitHub. [2021-06-04]. (原始内容存档于2020-11-11).
- ^ Coffer GitHub. [2022-04-01]. (原始内容存档于2022-04-01).