RISC-V Open Source Supervisor Binary Interface (OpenSBI) ======================================================== The **RISC-V Supervisor Binary Interface (SBI)** is a recommended interface between: 1. A platform specific firmware (M-mode) and a general purpose OS or hypervisor or bootloader (S-mode or HS-mode). 2. A hypervisor (HS-mode) and a general purpose OS or bootloader (VS-mode) The *RISC-V SBI specification* is maintained as an independent project by the RISC-V Foundation in [Github](https://github.com/riscv/riscv-sbi-doc) OpenSBI aims to provides an open-source and extensible implementation of the RISC-V SBI specification for case 1 mentioned above. OpenSBI implementation can be easily extended by RISC-V platform or System-on-Chip vendors to fit a particular hadware configuration. OpenSBI provides three components: 1. *libsbi.a* - A generic OpenSBI static library 2. *libplatsbi.a* - Platform specific OpenSBI static library, that is, libsbi.a plus platform specific hooks 3. *firmwares* - Platform specific bootable firmware binaries Building and Installing generic *libsbi.a* ------------------------------------------ For cross-compiling, the environment variable *CROSS_COMPILE* must be defined to specify the toolchain executable name prefix, e.g. *riscv64-unknown-elf-* if the gcc executable used is *riscv64-unknown-elf-gcc*. To build the generic OpenSBI library *libsbi.a*, simply execute: ``` make ``` All compiled binaries will be placed in the *build* directory. To specify an alternate build directory target, run: ``` make O= ``` To generate files to be installed for using *libsbi.a* in other projects, run: ``` make install ``` This will create the *install* directory with all necessary include files and binary files under it. To specify an alternate installation directory, run: ``` make I= install ``` Building and Installing platform specific *libsbi.a* and firmwares ------------------------------------------------------------------ The libplatsbi.a and firmware files are only built if the *`PLATFORM=`* argument is specified on make command lines. *``* must specify the path to one of the leaf directories under the *`platform`* directory. For example, to compile the library and firmware for QEMU RISC-V *virt* machine, *``* should be *`qemu/virt`*. To build *libsbi, libplatsbi, and firmwares* for a specific platform, run: ``` make PLATFORM= or make PLATFORM= O= ``` To install *libsbi, headers, libplatsbi, and firmwares*, run: ``` make PLATFORM= install or make PLATFORM= I= install ``` In addition, platform specific make command-line options to top-level make , such as *PLATFORM_* or *FW_* can also be specified. These options are described under *`docs/platform/.md`* and *`docs/firmware/.md`*. Documentation ------------- A more detailed documenation is under the *docs* directory and organized as follows. * *`docs/contributing.md`* - Guidelines for contributing to OpenSBI project * *`docs/platform_guide.md`* - Guidelines for adding new platform support * *`docs/library_usage.md`* - Guidelines for using the static library * *`docs/platform/.md`* - Documentation for the platform ** * *`docs/firmware/.md`* - Documentation for the firmware ** The source code is also well documented. For source level documentation, doxygen style is used. Please refer to [Doxygen manual] (http://www.stack.nl/~dimitri/doxygen/manual.html) for details on this format. The Doxygen can be installed on your debian build system using following: ``` sudo apt-get install doxygen doxygen-latex doxygen-doc doxygen-gui graphviz ``` To build a consolidated `refman.pdf` of all documenation, run: ``` make docs or make O= docs ``` **NOTE:** `refman.pdf` will be available under `/docs/latex`. To install a consolidated `refman.pdf` of all documenation, run: ``` make install_docs or make I= install_docs ``` **NOTE:** `refman.pdf` will be installed under `/docs`.