Device Tree

OpenVMM builds a flattened device tree (FDT) for two boot paths:

  • x86 IGVM files that request a device-tree parameter, such as OpenHCL.
  • ARM64 Linux direct boot without ACPI.

Both paths use one writer, in openvmm/openvmm_core/src/worker/vm_loaders/device_tree.rs. The processor architecture selects the processor, interrupt, and PCIe interrupt nodes. The boot path selects the memory, bus, and boot data nodes. ARM64 Linux direct boot with ACPI uses a small stub tree instead. The stub tree has no hardware descriptions. It tells the Linux EFI stub where to find the EFI system table, and the kernel then finds the hardware through ACPI.

Contents

Hardwarex86 IGVMARM64 Linux direct
Processors/cpus, with APIC IDs/cpus, with VP indexes
Memorymemory@..., with typesmemory@...
InterruptsNoneGIC, ITS or v2m, timer, PMU
PCIeECAM node per host bridgeThe same, with MSI and SMMU
VMBusVTL0 and VTL2 under /bus/openvmm/vmbus
UARTs/pio-bus/serial@.../openvmm/uart@... (PL011)
Boot data/chosen and /openhcl/chosen, with initrd range

The bootargs property in /chosen holds the command line. When a console is selected, the stdout-path property in /chosen points to its UART node.

On x86, the memory nodes tell OpenHCL which RAM is VTL2-protectable.

UARTs

The device tree describes only the UARTs that the VM's chipset capabilities mark for the device tree. These flags are separate from device attachment and from console selection.

On x86, the IGVM device tree describes COM1 and COM2 when any serial backend is configured. It describes COM3 and COM4 only when each port has its own backend. A listening backend counts as configured before a client connects. OpenHCL selects COM3 as its console when the device tree describes COM3, so the device tree does not describe COM3 without its own backend. COM1 defaults to a console backend; use --com1 none to disable it.

These rules do not remove disconnected emulated UARTs. Native x86 Linux-direct ACPI still describes all four ports when serial is enabled. ARM64 device trees and ACPI still describe both PL011 UARTs.