1# VirtIO-drivers-rs 2 3[](https://crates.io/crates/virtio-drivers) 4[](https://docs.rs/virtio-drivers) 5[](https://github.com/rcore-os/virtio-drivers/actions) 6 7VirtIO guest drivers in Rust. For **no_std** environment. 8 9## Support status 10 11### Device types 12 13| Device | Supported | 14| ------- | --------- | 15| Block | ✅ | 16| Net | ✅ | 17| GPU | ✅ | 18| Input | ✅ | 19| Console | ✅ | 20| Socket | ✅ | 21| ... | ❌ | 22 23### Transports 24 25| Transport | Supported | | 26| ----------- | --------- | ------------------------------------------------- | 27| Legacy MMIO | ✅ | version 1 | 28| MMIO | ✅ | version 2 | 29| PCI | ✅ | Memory-mapped CAM only, e.g. aarch64 or PCIe ECAM | 30 31### Device-independent features 32 33| Feature flag | Supported | | 34| ---------------------------- | --------- | --------------------------------------- | 35| `VIRTIO_F_INDIRECT_DESC` | ✅ | Indirect descriptors | 36| `VIRTIO_F_EVENT_IDX` | ✅ | `avail_event` and `used_event` fields | 37| `VIRTIO_F_VERSION_1` | TODO | VirtIO version 1 compliance | 38| `VIRTIO_F_ACCESS_PLATFORM` | ❌ | Limited device access to memory | 39| `VIRTIO_F_RING_PACKED` | ❌ | Packed virtqueue layout | 40| `VIRTIO_F_IN_ORDER` | ❌ | Optimisations for in-order buffer usage | 41| `VIRTIO_F_ORDER_PLATFORM` | ❌ | Platform ordering for memory access | 42| `VIRTIO_F_SR_IOV` | ❌ | Single root I/O virtualization | 43| `VIRTIO_F_NOTIFICATION_DATA` | ❌ | Extra data in device notifications | 44 45## Examples & Tests 46 47### [x86_64](./examples/x86_64) 48 49```bash 50cd examples/x86_64 51make qemu 52``` 53 54### [aarch64](./examples/aarch64) 55 56```bash 57cd examples/aarch64 58make qemu 59``` 60 61### [RISCV](./examples/riscv) 62 63```bash 64cd examples/riscv 65make qemu 66``` 67 68You will see device info & GUI Window in qemu. 69 70<img decoding="async" src="https://github.com/rcore-os/virtio-drivers/raw/master/examples/riscv/virtio-test-gpu.png" width="50%"> 71