Skip to content

lmt-swallow/rvvisor

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 

rvvisor

NOTE: This project is still work in progress!

rvvisor is a tiny hypervisor written in Rust, which partially supports RISC-V Hypervisor Extension v0.6.1 included in Volume II: RISC-V Privileged Architectures V1.12-draft).

demo image

Requirements

This project relies on the following tools.

To run rvvisor, you need to install them and configure your PATH first.

Usage

Here's a list of the possible usecases:

  • Run rvvisor with an example kernel
  • (in the future) Run our hypervisor with your own kernel

Run rvvisor with an example kernel

You can run the simple guest kernel, whose implementation is in ./guest directory, as follows.

rustup target add riscv64gc-unknown-none-elf || true

# build hypervisor
cd hypervisor
CC=riscv64-unknown-linux-gnu-gcc cargo build
cd ..

# build guest
cd guest
CC=riscv64-unknown-linux-gnu-gcc cargo build
cd ..

# run hypervisor with guest
cd hypervisor
cargo run -- -drive file=../guest/target/riscv64gc-unknown-none-elf/debug/riscv-virt-guest,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0

Run rvvisor with your own kernel

Currently, due to the lack of features, famous kernels like xv6-riscv or Linux do NOT work upon rrvisor.

NOTE: Debug rvvisor with GDB

You can debug rvvisor with gdb like this:

# in a shell ...
$ cargo run -- -S -gdb tcp::9999 # + additional opts

# in another shell ...
$ riscv64-unknown-linux-gnu-gdb target/riscv64gc-unknown-none-elf/debug/rvvisor
...
(gdb) target remote localhost:9999
(gdb) continue

Features (to be supported)

rvvisor currently supports the following features:

  • 🚧 Run a single VM upon rvvisor
    • load ELF image into the memory space of a VM
    • jump to the kernel image loaded to a VM image whiel enabling guest physical address translation by hgatp
    • run a tiny kernel which does not require any external hardwares like disk devices
    • handle read/write requests for CSRs from a guest
    • handle SBI calls
  • Run multiple VMs upon rvvisor
    • switch CPU contexts among guests
    • schedule the guest in a fancy way
  • Support multi-core host environment
  • Support device virtualization
    • block device
    • network device
    • input device
    • display device

About

[WIP] A tiny RISC-V hypervisor software written in Rust

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published