No Description

luojia65 7249784ced Support device tree binary on K210 platform reference impl 3 years ago
platform 7249784ced Support device tree binary on K210 platform reference impl 3 years ago
rustsbi 6334dc0235 Add license and docs.rs metadata for 0.2.0-alpha.2 4 years ago
test-kernel cd416bf91f Simplify code in trap handler of test kernel 4 years ago
.gitignore 2a8cf673e7 Filter out `.idea` folder for all platforms 4 years ago
CHANGELOG.md 7249784ced Support device tree binary on K210 platform reference impl 3 years ago
Cargo.toml ef28118403 Test kernel; illegal exception dispatch 4 years ago
LICENSE-MIT 183f19ea5e Update licence; update readme 4 years ago
LICENSE-MULAN 183f19ea5e Update licence; update readme 4 years ago
README.md 7249784ced Support device tree binary on K210 platform reference impl 3 years ago

README.md

RustSBI

RISC-V Supervisor Binary Interface (SBI) implementation in Rust; runs on M-mode.

crates.io Documentation License

Binary downloads

See releases.

Binaries are available for platforms which can be found on platform support page. This page includes an instruction to write your own RustSBI implementation on production use, and some reference implementations for experiments.

Features

  • Functional and extensible operating system runtime
  • Fully support to RISC-V SBI specification v0.2
  • Adapted for unix-like operating systems
  • Written in Rust
  • Competitive to OpenSBI with most of its function
  • Bundled with a test framework for SBI implementations
  • Supports QEMU emulator (priv. spec v1.11)
  • Backward compatible to Kendryte K210 with spec v1.9, MMU and S-Mode

Components

The RustSBI project contains three parts: the RustSBI library rustsbi, reference implementation in platform, and a simple operating system kernel to test SBI implementations in test-kernel.

The test kernel is used to test SBI functions. Boot this kernel using your platform, it will call all SBI calls and run instructions to test if underlying SBI environment is okay. if this kernel reports 'SUCCESS' and exits normally, it means that your SBI implementation is correct.

Frequently asked questions

  1. Can I use RustSBI on C based kernels?

Yes, you can! RustSBI strictly follows RISC-V SBI standard. All features are prepares for all programming languages, as long as they support RISC-V SBI defined calling convention.

If your kernel language supports other SBI implementations, typically it will support RustSBI in the same way.

Talks and documents

This project is originally a part of rCore Summer of Code 2020 activities, now it is capable of running rCore-Tutorial and other OS kernels on wide supported RISC-V devices.

Blog article (Chinese):

Slides (Chinese):

Notes on platform implementation

  1. RustSBI can be used as a library. Under normal circumstances, RustSBI platform can be implemented with embedded Rust's embedded-hal libraries.
  2. On both QEMU and K210 platform, we supports CLINT and PLIC peripherals. Embedded Rust's community still need more SoCs taped out to discuss on common libraries on RISC-V ecosystem. After these works are done, we may use crates then to implement QEMU, without the hal module we have now.
  3. Contributions are welcomed! We welcome to implement RustSBI for both FPGA cores and real cores. Implementations for emulators are also welcomed. Fire a pull request if you are ready!

License & Copyright

This project is licensed under either of

This project contains documents from RISC-V SBI specification repository. These documents are (C) RISC-V community under CC-BY 4.0 license.

Reference implementaion K210 includes Kendryte K210 DTS file from Western Digital, this file is (C) Western Digital Corporation or its affiliates under BSD-2-Clause license.