Skip to main content

Introduction

Miralis

Miralis is an experimental system that virtualises firmware to enforce strong isolation between opaque and SoC-dependant firmware and user-controlled hypervisor or operating system.

Getting Started

The Miralis project uses just to easily build, run, and test code. You can easily install just with your favorite package manager or cargo by following the instructions.

Miralis is primary developed and tested on QEMU, therefore you will need to install qemu-system-riscv64 on your system. Then you will need to install the rust toolchain, if rust is installed through rustup on the machine this can be done by running just install-toolchain

Then running Miralis is as simple as invoking just run.

Project Organisation

The Miralis sources live in src, that is where the main body of code live for now. Miralis does nothing by itself, however, and it needs a firmware to virtualise. The firmware folder contains simple firmware used for testing, including the default firmware selected by just run.

To make development and testing easier, the runner folder contains a simple command line tool to build, prepare, and load executables on QEMU. The runner is invoked automatically by just run.

The justfile holds a collection of useful commands, you can think of it as similar to a Makefile without the C build system bits. Running just or just help give the list of available commands.

Testing and Debugging

Integration tests can be run with just test.

The firmware can be selected as an additional argument to just run. Valid firmware are either names of firmware under the ./firmware/ directory, some pre-build binaries (such as opensbi), or paths to external firmware images. Thus, just run opensbi will execute OpenSBI on top of Miralis.

We provide support for debugging with GDB. To start a GDB session, first run Miralis with just debug and then run just gdb in another terminal. Similar to just run, just debug takes an optional firmware argument which can be used to debug a particular image. Debugging with GDB requires a RISC-V capable GDB executable in path. If just gdb can't locate such a binary it will provide a list of supported GDB binaries, installing any one of them will resolve the issue.

The log level can be adjusted using a config.toml file. See ./config/example.config.toml for reference.

Contributing

See docs/contributing.md.