-
Notifications
You must be signed in to change notification settings - Fork 81
Running RustyHermit
RustyHermit binaries can be run on either uhyve or qemu.
RustyHermit can run within our own hypervisor uhyve , which requires KVM to create a virtual machine. Please install the hypervisor as follows:
cargo +nightly install uhyve --locked
Afterwards, your are able to start RustyHermit applications within our hypervisor:
uhyve target/x86_64-unknown-hermit/debug/hello_world
More details can be found in the uhyve README.
It is also possible to run RustyHermit within Qemu. RustyHermit produces 64-bit binaries, but Qemu's x86 emulation cannot boot them directly. Therefore, the loader rusty-loader is required to boot the application. To build the loader, the assembler nasm is required. After the installation, the loader can be build as follows.
git clone https://github.com/hermitcore/rusty-loader.git
cd rusty-loader
cargo xtask build --arch x86_64
Afterwards, the loader is stored in target/x86_64-unknown-hermit-loader/debug/
as rusty-loader
.
As final step, the unikernel application app
can be booted with following command:
$ qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel path_to_loader/rusty-loader -initrd path_to_app/app -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr -device isa-debug-exit,iobase=0xf4,iosize=0x04 -enable-kvm
It is important to enable the processor features fsgsbase and rdtscp because it is a prerequisite to boot RustyHermit.
You can provide arguments to the application via the kernel commandline, which you can set with qemu's -append
option. Since both the kernel and the application can have parameters, they are separated with --
:
qemu-system-x86_64 ... -append "kernel-arguments -- application-arguments"