Kaynağa Gözat

doc: add section 'Use `rustsbi` as a Dependency Crate'

Add buildroot section for the ecosystem chapter.

Signed-off-by: Zhouqi Jiang <luojia@hust.edu.cn>
Zhouqi Jiang 3 hafta önce
ebeveyn
işleme
8827f7aaa9

+ 66 - 1
docs/src/02_libraries/01_rustsbi.md

@@ -1 +1,66 @@
-# rustsbi 核心抽象库
+# `rustsbi` 核心抽象库
+
+核心抽象库 `rustsbi` 提供封装 SBI 扩展的特型(trait)、生成宏和有关的辅助结构体、常量。我们首先介绍系统软件开发者如何引入 `rustsbi` 库;其次,我们介绍所有的 `rustsbi` 代码成员。
+
+## 引入 `rustsbi` 库作为依赖包
+
+为了在使用 Cargo 的 Rust 项目中引入 `rustsbi` 库,应当将 `rustsbi` 添加到对应 `Cargo.toml` 文件的 `[dependencies]` 章节中。可以使用命令行或者手动修改文件的形式添加依赖库。同时,需要根据项目的特点选择需要的 Cargo 特性(features)。
+
+开发 RISC-V 机器态裸机固件时,需要增加 `machine` 特性,以引入裸机下的 RISC-V 环境寄存器识别操作。需要运行以下指令。
+
+```bash
+cargo add rustsbi --features machine
+```
+```toml
+# 或者,在Cargo.toml中添加以下内容(下文不再赘述)
+[dependencies]
+rustsbi = { version = "0.4.0", features = ["machine"] }
+```
+
+> 机器态裸机固件将识别的 RISC-V 环境寄存器例如 `mvendorid` 和 `mimpid`,因此只能在 RISC-V 目标下编译。
+>
+> 编译完成后,目标项目应当在机器态运行,以获得直接访问这些寄存器的权限。其它特权态的软件需获取环境寄存器内容时,应当调用 SBI 接口,而不是直接读取环境寄存器。
+
+开发虚拟化软件时,有时需要转发使用宿主机环境本身具有的 SBI 接口,此时我们增加 `forward` 特性。
+
+```bash
+cargo add rustsbi --features forward
+```
+```toml
+[dependencies]
+rustsbi = { version = "0.4.0", features = ["forward"] }
+```
+
+> 虚拟化软件运行于 RISC-V 的 HS 态。无论是 Type-1 还是 Type-2 虚拟化软件,都需要为其中运行于 VS 态的客户机系统提供 SBI 接口。然而,HS 态宿主机系统也是运行在外部提供的 SBI 接口之上;因此可能存在 SBI 转发操作。
+>
+> 当 `forward` 特性开启时,`rustsbi` 库直接调用 HS 态所处的 SBI 环境,它将使用仅支持 RISC-V 架构的 `sbi-rt` 包,因此此选项只能在 RISC-V 编译目标下编译。
+
+开发模拟器时,使用宿主 SBI 环境的需求不常见。因此,我们不增加任何特性地引入 `rustsbi` 。
+
+```bash
+cargo add rustsbi
+```
+```toml
+[dependencies]
+rustsbi = "0.4.0"
+```
+
+> 模拟器通常会提供自己的 `vendorid` 和 `impid` 等环境寄存器,以表示模拟器环境的产品标识符和版本号。不增加任何特性的 `rustsbi` 包可以在任何支持的平台下编译,不仅限于 RISC-V。
+>
+> `rustsbi` 包默认情况下不包含任何特性,即 default features 为空,不开启使用 RISC-V 汇编语言的代码特性,以适应软件测试的需求。
+
+最新的 RustSBI 版本号是 0.4.0。使用以上的命令或配置,可以依赖于最新的 RustSBI 0.4.0 版本。然而,如果需要使用其它的 RustSBI 版本,应当在 `cargo add` 命令中增加依赖包的版本号。例如:
+
+```bash
+cargo add rustsbi@0.3.2
+```
+
+不同 RustSBI 版本的特性不同,应参考对应版本的 RustSBI 手册以获取这方面的帮助。
+
+## 代码成员
+
+### 特型(trait)组合
+
+### 结构体
+
+### 辅助常量

+ 1 - 0
docs/src/09_ecosystem/buildroot.md

@@ -0,0 +1 @@
+# Buildroot RustSBI 解决方案

+ 1 - 0
docs/src/SUMMARY.md

@@ -48,6 +48,7 @@
     - [ArceBoot 特权态引导程序](./08_incubating/arceboot.md)
 - [引导生态简介](./chapter_09_ecosystem.md)
     - [Oreboot LinuxBoot 引导解决方案](./09_ecosystem/oreboot.md)
+    - [Buildroot RustSBI 解决方案](./09_ecosystem/buildroot.md)
     - [零阶段引导程序](./09_ecosystem/zsbl.md)
 - [开放源代码指南](./chapter_10_oss_guide.md)
     - [代码获取与构建](./10_oss_guide/01_usage.md)

+ 4 - 2
docs/src/chapter_01_what_is_rustsbi.md

@@ -1,6 +1,8 @@
 # 什么是 RustSBI?
 
-感谢您选择 RustSBI!RustSBI 是一款综合的安全引导解决方案。RustSBI 主要由 Rust 语言编写,适用于 RISC-V 的 Supervisor Binary Interface(SBI)架构,是遵守 MIT 或 Mulan-PSL v2 双协议发布的开源软件。RustSBI 在有效提升 RISC-V SBI 接口软件开发效率的同时,提供可供下载的二进制固件包,并包含大模型 Agent 应用模块,便于用户使用和二次开发。
+![logo](https://avatars.githubusercontent.com/u/85245528?s=400)
+
+感谢您选择 RustSBI!RustSBI 是一款综合的安全引导解决方案。RustSBI 主要由 Rust 语言编写,适用于 RISC-V 的 Supervisor Binary Interface(SBI)架构,是遵守 MIT 或 Mulan-PSL v2 双协议发布的开源软件。RustSBI 在有效提升 RISC-V SBI 接口软件开发效率的同时,提供可供下载的二进制固件包和多种生态软件整合方案,并包含大模型 Agent 应用模块,便于用户使用和二次开发。
 
 RustSBI 目前支持 RISC-V SBI 2.0 正式版,并已被 RISC-V 基金会收录为官方推荐的 RISC-V SBI 实现之一,它的实现编号为 4。
 
@@ -31,6 +33,6 @@ RustSBI 项目由以下模块构成。
 
 在第二章中,我们将详细介绍 RustSBI 的核心库,它具有核心抽象、函数和常量支持等多个功能,便于开发模拟器和虚拟化平台。第三章将主要介绍 RustSBI Prototyper 裸机引导程序,它可在裸机平台运行,支持运行于真实硬件和模拟器的裸机操作系统。第四章介绍平台支持模块,它构成组件化的驱动程序,同时运用于 RustSBI 和 Rust 系统软件生态,具有相关的支持程序。
 
-在产品介绍之后,各平台、系统支持将于第五章、第六章介绍。第七章将详细阐述如何运用 RustSBI 开发用户所需的系统软件模块;第八章介绍 RustSBI 孵化中的软件模块,如 RustSBI Agent 等大模型应用和 ArceBoot 引导程序。第九章介绍如何将 RustSBI 与生态中的各个引导软件联动使用,例如与 Oreboot 联合使用;第十章介绍 RustSBI 开源社区生态和贡献方法。
+在产品介绍之后,各平台、系统支持将于第五章、第六章介绍。第七章将详细阐述如何运用 RustSBI 开发系统软件开发者所需的软件包模块;第八章介绍 RustSBI 孵化中的子项目群,如 RustSBI Agent 等大模型应用和 ArceBoot 引导程序。第九章介绍如何将 RustSBI 与生态中的各个引导软件联动使用,例如与 Oreboot 或 Buildroot 联合使用;第十章介绍 RustSBI 开源社区生态和贡献方法。
 
 让我们开始吧!

+ 6 - 6
docs/src/chapter_02_libraries.md

@@ -2,19 +2,19 @@
 
 本章将详细介绍 RustSBI 核心库的架构设计与功能模块。
 
-RustSBI 核心库采用分层设计理念,将核心功能与机器态实现解耦,通过多个功能模块化的 Rust 包(crate)为 RISC-V SBI 生态提供支持。其模块化架构适用于内核开发、安全固件设计、虚拟化方案及模拟器等不同场景,主要包含以下核心组件:
+RustSBI 核心库采用分层设计理念,将核心功能与机器态实现解耦,通过多个功能模块化的 Rust 包(crate)为 RISC-V SBI 生态提供支持。其模块化架构适用于内核开发、安全固件设计、虚拟化方案及模拟器等不同场景,并不仅限于机器态 RISC-V 固件。它主要包含以下核心组件:
 
-1. `rustsbi` SBI 服务抽象层
+1. [`rustsbi` SBI 服务抽象层](02_libraries/01_rustsbi.md)
 
-    该包通过特型(trait)机制抽象 SBI 扩展功能,并提供宏编程支持。开发者在构建裸机固件时,只需为平台结构体实现相应的 SBI 扩展 trait,再通过 `#[derive(RustSBI)]` 宏即可自动生成从异常处理到 SBI 调用的分发逻辑,显著降低底层开发复杂度。针对虚拟化场景,支持为虚拟机单独实现扩展或通过 `Forward` 机制透传宿主机扩展。对于非 RISC-V 架构的模拟器,可利用宿主平台特性实现跨架构 SBI 调用
+    该包通过特型(trait)机制抽象 SBI 扩展功能,并提供宏编程支持。开发者在构建裸机固件时,只需为平台结构体实现相应的 SBI 扩展 trait,再通过 `#[derive(RustSBI)]` 宏即可自动生成从异常处理到 SBI 调用的分发逻辑,显著降低 SBI 底层开发复杂度。针对虚拟化场景,支持为虚拟机单独实现扩展或通过 `Forward` 机制透传宿主机扩展。对于非 RISC-V 架构的模拟器,可利用宿主平台特性跨架构地提供 SBI 运行环境
 
-2. `sbi-rt` 内核态运行时
+2. `sbi-rt` 内核态最小运行环境
 
-    为操作系统内核、虚拟化监控程序等特权级软件提供符合人体工程学的 SBI 接口封装。通过类型安全的 Rust 函数替代易出错的裸常量操作和内联汇编,开发者可直接调用标准化的 SBI 服务接口。该模块有效提升系统软件开发效率,同时保障代码的可靠性与可维护性。
+    为操作系统内核、虚拟化监控程序等特权级软件提供符合人体工程学的 SBI 接口封装。通过类型安全的 Rust 函数替代易出错的裸常量操作和内联汇编。通过 `sbi-rt` ,开发者可直接调用标准化的 SBI 服务接口。该模块有效提升系统软件开发效率,同时保障代码的可靠性与可维护性。
 
 3. `sbi-spec` 规范基础设施
 
-    作为 RustSBI 生态的基石,提供完整的 SBI 规范常量体系(EID/FID)、标准数据结构定义及严格的静态类型校验。通过编译期检查机制预防常量误用和数据结构错位,确保实现与 RISC-V 国际标准的高度一致性。
+    作为 RustSBI 生态的基石,提供完整的 SBI 规范常量体系(EID/FID)、标准数据结构定义及严格的静态类型校验。通过编译期检查机制预防常量误用和数据结构错位,确保实现与 RISC-V 国际标准的严格一致性。
 
 4. `sbi-testing` 自动化测试框架