Devices

This chapter describes emulated devices in crosvm. These devices work like hardware for the guest.

List of devices

Here is a (non-comprehensive) list of emulated devices provided by crosvm.

Emulated Devices

  • CMOS/RTC - Used to get the current calendar time.
  • i8042 - Used by the guest kernel to exit crosvm.
  • usb - xhci emulation to provide USB device passthrough.
  • serial - x86 I/O port driven serial devices that print to stdout and take input from stdin.

VirtIO Devices

  • balloon - Allows the host to reclaim the guest's memories.
  • block - Basic read/write block device.
  • console - Input and outputs on console.
  • fs - Shares file systems over the FUSE protocol.
  • gpu - Graphics adapter.
  • input - Creates virtual human interface devices such as keyboards.
  • iommu - Emulates an IOMMU device to manage DMA from endpoints in the guest.
  • net - Device to interface the host and guest networks.
  • p9 - Shares file systems over the 9P protocol.
  • pmem - Persistent memory.
  • rng - Entropy source used to seed guest OS's entropy pool.
  • scsi - SCSI device.
  • snd - Encodes and decodes audio streams.
  • tpm - Creates a TPM (Trusted Platform Module) device backed by vTPM daemon.
  • video - Allows the guest to leverage the host's video capabilities.
  • wayland - Allows the guest to use the host's Wayland socket.
  • vsock - Enables use of virtual sockets for the guest.
  • vhost-user - VirtIO devices which offloads the device implementation to another process through the vhost-user protocol:

Device hotplug (experimental)

A hotplug-capable device can be added as a PCI device to the guest. To enable hotplug, compile crosvm with feature flag pci-hotplug:

cargo build --features=pci-hotplug #additional parameters

When starting the VM, specify the number of slots with --pci-hotplug-slots option. Additionally, specify a control socket specified with -s option for sending hotplug commands.

For example, to run a VM with 3 PCI hotplug slots and control socket:

VM_SOCKET=/run/crosvm.socket
crosvm run \
    -s ${VM_SOCKET} \
    --pci-hotplug-slots 3
    # usual crosvm args

Currently, only network devices are supported.