xref: /aosp_15_r20/external/crosvm/docs/book/src/devices/index.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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