1*bb4ee6a4SAndroid Build Coastguard Worker# Devices 2*bb4ee6a4SAndroid Build Coastguard Worker 3*bb4ee6a4SAndroid Build Coastguard WorkerThis chapter describes emulated devices in crosvm. These devices work like hardware for the guest. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker## List of devices 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard WorkerHere is a (non-comprehensive) list of emulated devices provided by crosvm. 8*bb4ee6a4SAndroid Build Coastguard Worker 9*bb4ee6a4SAndroid Build Coastguard Worker### Emulated Devices 10*bb4ee6a4SAndroid Build Coastguard Worker 11*bb4ee6a4SAndroid Build Coastguard Worker- [`CMOS/RTC`] - Used to get the current calendar time. 12*bb4ee6a4SAndroid Build Coastguard Worker- [`i8042`] - Used by the guest kernel to exit crosvm. 13*bb4ee6a4SAndroid Build Coastguard Worker- [usb] - xhci emulation to provide USB device passthrough. 14*bb4ee6a4SAndroid Build Coastguard Worker- [`serial`] - x86 I/O port driven serial devices that print to stdout and take input from stdin. 15*bb4ee6a4SAndroid Build Coastguard Worker 16*bb4ee6a4SAndroid Build Coastguard Worker### VirtIO Devices 17*bb4ee6a4SAndroid Build Coastguard Worker 18*bb4ee6a4SAndroid Build Coastguard Worker- [`balloon`] - Allows the host to reclaim the guest's memories. 19*bb4ee6a4SAndroid Build Coastguard Worker- [`block`] - Basic read/write block device. 20*bb4ee6a4SAndroid Build Coastguard Worker- [`console`] - Input and outputs on console. 21*bb4ee6a4SAndroid Build Coastguard Worker- [`fs`] - Shares file systems over the FUSE protocol. 22*bb4ee6a4SAndroid Build Coastguard Worker- [`gpu`] - Graphics adapter. 23*bb4ee6a4SAndroid Build Coastguard Worker- [`input`] - Creates virtual human interface devices such as keyboards. 24*bb4ee6a4SAndroid Build Coastguard Worker- [`iommu`] - Emulates an IOMMU device to manage DMA from endpoints in the guest. 25*bb4ee6a4SAndroid Build Coastguard Worker- [`net`] - Device to interface the host and guest networks. 26*bb4ee6a4SAndroid Build Coastguard Worker- [`p9`] - Shares file systems over the 9P protocol. 27*bb4ee6a4SAndroid Build Coastguard Worker- [`pmem`] - Persistent memory. 28*bb4ee6a4SAndroid Build Coastguard Worker- [`rng`] - Entropy source used to seed guest OS's entropy pool. 29*bb4ee6a4SAndroid Build Coastguard Worker- [`scsi`] - SCSI device. 30*bb4ee6a4SAndroid Build Coastguard Worker- [`snd`] - Encodes and decodes audio streams. 31*bb4ee6a4SAndroid Build Coastguard Worker- [`tpm`] - Creates a TPM (Trusted Platform Module) device backed by vTPM daemon. 32*bb4ee6a4SAndroid Build Coastguard Worker- [`video`] - Allows the guest to leverage the host's video capabilities. 33*bb4ee6a4SAndroid Build Coastguard Worker- [`wayland`] - Allows the guest to use the host's Wayland socket. 34*bb4ee6a4SAndroid Build Coastguard Worker- [`vsock`] - Enables use of virtual sockets for the guest. 35*bb4ee6a4SAndroid Build Coastguard Worker- [`vhost-user`] - VirtIO devices which offloads the device implementation to another process 36*bb4ee6a4SAndroid Build Coastguard Worker through the [vhost-user protocol]: 37*bb4ee6a4SAndroid Build Coastguard Worker - [vmm side]: Shares its virtqueues. 38*bb4ee6a4SAndroid Build Coastguard Worker - [device side]: Consumes virtqueues. 39*bb4ee6a4SAndroid Build Coastguard Worker 40*bb4ee6a4SAndroid Build Coastguard Worker## Device hotplug (experimental) 41*bb4ee6a4SAndroid Build Coastguard Worker 42*bb4ee6a4SAndroid Build Coastguard WorkerA hotplug-capable device can be added as a PCI device to the guest. To enable hotplug, compile 43*bb4ee6a4SAndroid Build Coastguard Workercrosvm with feature flag `pci-hotplug`: 44*bb4ee6a4SAndroid Build Coastguard Worker 45*bb4ee6a4SAndroid Build Coastguard Worker```sh 46*bb4ee6a4SAndroid Build Coastguard Workercargo build --features=pci-hotplug #additional parameters 47*bb4ee6a4SAndroid Build Coastguard Worker``` 48*bb4ee6a4SAndroid Build Coastguard Worker 49*bb4ee6a4SAndroid Build Coastguard WorkerWhen starting the VM, specify the number of slots with `--pci-hotplug-slots` option. Additionally, 50*bb4ee6a4SAndroid Build Coastguard Workerspecify a [control socket](../architecture/overview.md#the-vm-control-sockets) specified with `-s` 51*bb4ee6a4SAndroid Build Coastguard Workeroption for sending hotplug commands. 52*bb4ee6a4SAndroid Build Coastguard Worker 53*bb4ee6a4SAndroid Build Coastguard WorkerFor example, to run a VM with 3 PCI hotplug slots and control socket: 54*bb4ee6a4SAndroid Build Coastguard Worker 55*bb4ee6a4SAndroid Build Coastguard Worker```sh 56*bb4ee6a4SAndroid Build Coastguard WorkerVM_SOCKET=/run/crosvm.socket 57*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \ 58*bb4ee6a4SAndroid Build Coastguard Worker -s ${VM_SOCKET} \ 59*bb4ee6a4SAndroid Build Coastguard Worker --pci-hotplug-slots 3 60*bb4ee6a4SAndroid Build Coastguard Worker # usual crosvm args 61*bb4ee6a4SAndroid Build Coastguard Worker``` 62*bb4ee6a4SAndroid Build Coastguard Worker 63*bb4ee6a4SAndroid Build Coastguard WorkerCurrently, only network devices are supported. 64*bb4ee6a4SAndroid Build Coastguard Worker 65*bb4ee6a4SAndroid Build Coastguard Worker[device side]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/vhost/user/device/ 66*bb4ee6a4SAndroid Build Coastguard Worker[usb]: usb.md 67*bb4ee6a4SAndroid Build Coastguard Worker[vhost-user protocol]: https://qemu.readthedocs.io/en/latest/interop/vhost-user.html 68*bb4ee6a4SAndroid Build Coastguard Worker[vmm side]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/vhost/user/vmm/ 69*bb4ee6a4SAndroid Build Coastguard Worker[`balloon`]: balloon.md 70*bb4ee6a4SAndroid Build Coastguard Worker[`block`]: block.md 71*bb4ee6a4SAndroid Build Coastguard Worker[`cmos/rtc`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/cmos.rs 72*bb4ee6a4SAndroid Build Coastguard Worker[`console`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/console.rs 73*bb4ee6a4SAndroid Build Coastguard Worker[`fs`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/fs/ 74*bb4ee6a4SAndroid Build Coastguard Worker[`gpu`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/gpu/ 75*bb4ee6a4SAndroid Build Coastguard Worker[`i8042`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/i8042.rs 76*bb4ee6a4SAndroid Build Coastguard Worker[`input`]: input.md 77*bb4ee6a4SAndroid Build Coastguard Worker[`iommu`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/iommu.rs 78*bb4ee6a4SAndroid Build Coastguard Worker[`net`]: net.md 79*bb4ee6a4SAndroid Build Coastguard Worker[`p9`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/p9.rs 80*bb4ee6a4SAndroid Build Coastguard Worker[`pmem`]: pmem.md 81*bb4ee6a4SAndroid Build Coastguard Worker[`rng`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/rng.rs 82*bb4ee6a4SAndroid Build Coastguard Worker[`scsi`]: scsi.md 83*bb4ee6a4SAndroid Build Coastguard Worker[`serial`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/serial.rs 84*bb4ee6a4SAndroid Build Coastguard Worker[`snd`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/snd/ 85*bb4ee6a4SAndroid Build Coastguard Worker[`tpm`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/tpm.rs 86*bb4ee6a4SAndroid Build Coastguard Worker[`vhost-user`]: vhost_user.md 87*bb4ee6a4SAndroid Build Coastguard Worker[`video`]: video.md 88*bb4ee6a4SAndroid Build Coastguard Worker[`vsock`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/devices/src/virtio/vhost/vsock.rs 89*bb4ee6a4SAndroid Build Coastguard Worker[`wayland`]: wayland.md 90