12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //! This example illustrates how to use the `Version` structure which represents a valid
- //! RISC-V SBI version.
- /// Import the version type defined in the SBI specification, used for representing and
- /// manipulating SBI version numbers.
- use sbi_spec::base::Version;
- /// We mock a S-mode software (kernel, etc.) that runs on minimum SBI version of v1.0;
- /// it will detect from the environment and judge if it meets the minimum SBI version demand.
- fn main() {
- // Create a version structure representing the minimum version at RISC-V SBI v1.0.
- let minimum_version = Version::V1_0;
- // Call the mock SBI runtime to obtain the current version number.
- println!("Probing SBI version of current environment...");
- let current_version = sbi::get_spec_version();
- // Print the detected SBI version.
- println!("Kernel running on SBI version {}", current_version);
- // Version comparison: Check whether the current version meets the minimum
- // requirement (v1.0 or higher).
- if current_version >= minimum_version {
- // The version meets the requirement, output success message.
- println!("The SBI version meets minimum demand of RISC-V SBI v1.0.");
- println!("✓ Test success!");
- } else {
- // The version is too low, output failure message.
- println!("✗ Test failed, SBI version is too low.");
- }
- }
- /* -- Implementation of a mock SBI runtime -- */
- /// Module simulating an SBI runtime for the test environment.
- mod sbi {
- use sbi_spec::base::Version;
- /// Mock function to retrieve the SBI specification version.
- pub fn get_spec_version() -> Version {
- // Return a hardcoded version number `0x0200_0000`.
- // Using the parsing rule from the RISC-V SBI Specification, this represents major
- // version 2, minor version 0 (i.e., 2.0).
- // In a real environment, this function should interact with the SBI implementation
- // via ECALL to obtain the actual version.
- Version::from_raw(0x0200_0000)
- }
- }
- /* Code execution result analysis:
- The current simulated SBI version is 2.0, which is higher than the minimum requirement
- of 1.0, so the output will be:
- ✓ Test success!
- To test a failure scenario, modify the mock return value to a version lower than 1.0,
- for example:
- `Version::from_raw(0x0000_0002)` represents 0.2.
- */
|