Skip to content

Creating and Editing Virtual Machines

On the Virtual Machine tab, click the + button in the lower-right corner to create a new Virtual Machine; on a Virtual Machine's detail page, click Edit to modify an existing one (editing is only possible while it is stopped).

The configuration interface is divided into 5 swipeable tabs: Basics / Boot / Display / Storage / Network. The button at the bottom is used to save; on save, each tab is validated in turn, and if there is an error the interface automatically jumps to the first tab with a problem.

Create Virtual Machine Interface

📷 Screenshot placeholder: Create/Edit Virtual Machine - tab overview


Tab 1 · Basics

FieldMeaningDefault / Options
NameVirtual Machine name; must be unique and a valid file nameRequired
MemoryMemory size (unit selectable, ultimately stored in MB)512 MB
CPU countNumber of vCPUs1
SWIOTLB sizeSWIOTLB buffer used in Protected Mode64 MB
Memory balloonvirtio-balloon dynamic memory reclamationOff
PMUPerformance Monitoring UnitOff
RNGRandom number generatorOff
SMTSimultaneous multithreadingOff
USBUSB controllerOff
Sandboxcrosvm sandboxOff
Huge PagesUse huge pages (requires the HugePage module)Off
Huge page preallocate modeHow huge pages are lentDisabled / Single (lend the whole block at once) / Chunked (≤256 MiB, default)
Protected ModeGunyah protection levelNormal / Protected / No firmware protection (default)
BackendVirtual Machine backend (VMM)CrosVM (default) / QEMU
VirtualizationHypervisor selectionAuto (default) / Software emulation / Linux KVM / Qualcomm Gunyah / MediaTek GenieZone
Debug traceTrace the VMM process with strace; trace logs are written to the cache directory to help diagnose boot / runtime issuesOff
Extra optionsAdditional command-line arguments passed through to the VMM (one per line)

Backend and Virtualization Compatibility

  • QEMU supports: software emulation, KVM, Gunyah
  • CrosVM supports: KVM, Gunyah, GenieZone

Saving an incompatible combination will produce an error. Generally, keeping CrosVM + Auto is fine.


Tab 2 · Boot

  • Auto-start on boot: automatically launch this Virtual Machine after the device boots
  • Boot method: UEFI or Linux boot protocol

UEFI Boot

Suitable for the vast majority of Linux distribution images and Windows.

  • UEFI firmware path: leave empty to use the built-in EDK2 firmware; a custom firmware only takes effect with the QEMU backend (CrosVM always uses the built-in EDK2)

Linux Boot Protocol

Loads the kernel directly for booting, suitable for custom kernel scenarios. There are two kernel sources:

A. Disk image (auto-scan)

Automatically scans the selected disk for boot entries (kernel / initrd / cmdline).

OptionDescription
Boot diskChoose which disk to scan for boot entries
Boot entryFollow the bootloader automatically, or specify a particular entry
RescanRe-detect boot entries
vdafix (on by default)Rewrites the root= / resume= device names to PARTUUID= to avoid device-name drift
cmdline overrideLeave empty to use the cmdline that ships with the image
Boot menu wait secondsDefault 2; set to 0 to hide the menu

B. Manual specification

OptionDescription
Kernel pathBuilt-in Linux kernel / system MicroDroid kernel / external file
initramfs pathBuilt-in / MicroDroid / MicroDroid debuggable / external file
cmdlineDefault root=/dev/vda2

DMA Warning

In Protected Mode, if the kernel in use lacks the CONFIG_DMA_RESTRICTED_POOL option, the interface shows a DMA warning. In this case it is recommended to turn off Protected Mode or switch kernels.


Tab 3 · Display

For complete display functionality (VNC, Native Display, external screen casting) see Graphical Display. The configuration fields are as follows:

GPU

FieldMeaningOptions
Enable GPUTurn on GPU accelerationToggle
RendererGPU backend2D (software) / VirGL / GfxStream (default)
GPU APIGraphics APIVulkan / EGL / OpenGL ES (default) / ANGLE

Display

FieldMeaningOptions / Range
Enable displayEnable graphical displayToggle
Display backendFramebuffer typeSimpleFB (default) / Virtio-GPU (requires GPU enabled first)
Enable Native DisplayOnly visible when GPU is on + Virtio-GPU (GfxStream)Toggle
Display widthResolution width320–8192, default 1280
Display heightResolution height320–8192, default 720
Refresh rateHz1–400, default 60
Horizontal / Vertical DPIDPI (only visible when not SimpleFB)100–800, default 160

VNC

FieldMeaningOptions
Enable VNCTurn on the VNC serviceToggle
Host addressVNC listen address
PortVNC port1024–65535 (leave empty to auto-assign)
Password authenticationWhether to enable a passwordToggle
PasswordVNC passwordOne-click clear / generate an 8-character random password

Tab 4 · Storage

Disk List

Each disk can be configured with:

  • Path: enter manually / browse files / select a registered disk / import or create a disk
  • Bus: VIRTIO / SCSI / PMEM / PFLASH / CDROM
  • Read-only: whether to mount read-only

CDROM

When installing a system, you can mount the installation ISO on the CDROM bus with read-only enabled, and mount the target blank disk on the VIRTIO bus.

Shared Directory List

Share folders between the host and the Virtual Machine via VirtFS. Each entry can be configured with:

FieldMeaningDefault / Options
Host directory pathThe host directory to share
TagMount tag; must be unique and valid
TypeProtocolP9 / FS (virtiofs, default)
CacheCache policyNEVER / AUTO (default) / ALWAYS
Writebackwriteback cacheOff
DAXDAX direct accessOff
POSIX ACLPOSIX ACL supportOn (default)
Timeout secondsMetadata timeout5

Inside the Virtual Machine, mount using the corresponding tag, for example:

bash
# virtiofs type
mount -t virtiofs <tag> /mnt/share
# 9p type
mount -t 9p -o trans=virtio <tag> /mnt/share

Tab 5 · Network

Each virtual network interface card (NIC) can be configured with:

FieldMeaning
NetworkChoose from the configured Bridge Networks
MAC addressOptional; can be randomly generated
Source MAC filteringRequires a MAC to be configured when enabled
Port isolationIsolate from other ports on the same network
VLAN ID0–4094 tagged access, 4095 = trunk, empty = trunk
DHCPv4 static assignmentAddress offset (default 64) + Port Forwarding list
DHCPv6 static assignmentAddress offset + Port Forwarding list

Port forwarding format: one entry per line, [protocol] host-port:guest-port; leaving the protocol empty means tcp+udp, and range notation 8000-9000:8000-9000 is supported.

Conditions for Port Forwarding to Take Effect

Port Forwarding only works when SNAT is enabled on the network it belongs to; IPv6 Port Forwarding additionally requires the gVisor bridge.


Saving and Validation

After clicking the save button at the bottom, the system validates the configuration tab by tab. If an item is invalid (such as a duplicate name, an illegal CIDR, a tag conflict, etc.), it automatically jumps to the location of the error and shows a hint. Once validation passes, the Virtual Machine is created/updated.

Released under the GNU GPL v3.0 License