Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cloud-hypervisor/rust-hypervisor-firmware
https://github.com/cloud-hypervisor/rust-hypervisor-firmware
Last synced: 7 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/cloud-hypervisor/rust-hypervisor-firmware
- Owner: cloud-hypervisor
- License: apache-2.0
- Created: 2019-04-15T23:16:15.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-12-25T03:06:44.000Z (17 days ago)
- Last Synced: 2024-12-27T19:04:04.627Z (14 days ago)
- Language: Rust
- Size: 641 KB
- Stars: 614
- Watchers: 32
- Forks: 58
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Rust Hypervisor Firmware
This repository contains a simple firmware that is designed to be launched from
anything that supports loading ELF binaries and running them with the
PVH booting standardThe purpose is to be able to use this firmware to be able to load a
bootloader from within a disk image without requiring the use of a complex
firmware such as TianoCore/edk2 and without requiring the VMM to reuse
functionality used for booting the Linux kernel.Currently it will directly load a kernel from a disk image that follows the
[Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification)There is also minimal EFI compatibility support allowing the boot of some
images that use EFI (shim + GRUB2 as used by Ubuntu).The firmware is primarily developed against [Cloud
Hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor) but there is
also support for using QEMU's PVH loader.This project was originally developed using
[Firecracker](https://github.com/firecracker-microvm) however as it does not
currently support resetting the virtio block device it is not possible to boot
all the way into the OS.## Features
* virtio (PCI) block support
* GPT parsing (to find EFI system partition)
* FAT12/16/32 directory traversal and file reading
* bzImage loader
* "Boot Loader Specification" parser
* PE32+ loader
* Minimal EFI environment (sufficient to boot shim + GRUB2 as used by Ubuntu)## x86-64 Support
### Building
To compile:
```
cargo build --release --target x86_64-unknown-none.json -Zbuild-std=core -Zbuild-std-features=compiler-builtins-mem
```The result will be in:
```
target/x86_64-unknown-none/release/hypervisor-fw
```### Running
Works with Cloud Hypervisor and QEMU via their PVH loaders as an alternative to
the Linux kernel.Cloud Hypervisor and QEMU are currently the primary development targets for the
firmware although support for other VMMs will be considered.#### Cloud Hypervisor
As per [getting
started](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/README.md#2-getting-started)However instead of using the binary firmware for the parameter to `--kernel`
instead use the binary you build above.```
$ pushd $CLOUDH
$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
$ ./cloud-hypervisor/target/release/cloud-hypervisor \
--kernel ./target/x86_64-unknown-none/release/hypervisor-fw \
--disk path=focal-server-cloudimg-amd64.raw \
--cpus boot=4 \
--memory size=512M \
--net "tap=,mac=,ip=,mask=" \
--rng
$ popd
```#### QEMU
Use the QEMU `-kernel` parameter to specify the path to the firmware.
e.g.
```
$ qemu-system-x86_64 -machine q35,accel=kvm -cpu host,-vmx -m 1G\
-kernel ./target/x86_64-unknown-none/release/hypervisor-fw \
-display none -nodefaults \
-serial stdio \
-drive id=os,file=focal-server-cloudimg-amd64.raw,if=none \
-device virtio-blk-pci,drive=os,disable-legacy=on
```## AArch64 Support
### Building
To compile:
```
cargo build --release --target aarch64-unknown-none.json -Zbuild-std=core -Zbuild-std-features=compiler-builtins-mem
```The result will be in:
```
target/aarch64-unknown-none/release/hypervisor-fw
```## RISC-V Support
Experimental RISC-V support is available. This is currently designed to run as a
payload from OpenSBI under QEMU virt. It is expected wider platform support
will become available in the future.### Building
To compile:
```
cargo build --release --target riscv64gcv-unknown-none-elf.json -Zbuild-std=core -Zbuild-std-features=compiler-builtins-mem
```The result will be in:
```
target/riscv64gcv-unknown-none-elf/release/hypervisor-fw
```### Running
Currently only QEMU has been tested.
#### QEMU
```
$ qemu-system-riscv64 -M virt -cpu rv64 -smp 1 -m 1024 \
-nographic -kernel target/riscv64gcv-unknown-none-elf/release/hypervisor-fw \
-drive id=mydrive,file=root.img,format=raw \
-device virtio-blk-pci,drive=mydrive,disable-legacy=on
```## Testing
"cargo test" needs disk images from make-test-disks.sh
And clear-28660-kvm.img:
https://download.clearlinux.org/releases/28660/clear/clear-28660-kvm.img.xz
sha1sum: 5fc086643dea4b20c59a795a262e0d2400fab15f
## Security issues
Please contact the maintainers listed in the MAINTAINERS.md file with security issues.