1ac06724aSPaolo Bonzini# mach-virt - VirtIO guest (serial console) 2ac06724aSPaolo Bonzini# ========================================================= 3ac06724aSPaolo Bonzini# 4ac06724aSPaolo Bonzini# Usage: 5ac06724aSPaolo Bonzini# 6ac06724aSPaolo Bonzini# $ qemu-system-aarch64 \ 7ac06724aSPaolo Bonzini# -nodefaults \ 8ac06724aSPaolo Bonzini# -readconfig mach-virt-serial.cfg \ 9ac06724aSPaolo Bonzini# -display none -serial mon:stdio \ 10ac06724aSPaolo Bonzini# -cpu host 11ac06724aSPaolo Bonzini# 12ac06724aSPaolo Bonzini# You will probably need to tweak the lines marked as 13ac06724aSPaolo Bonzini# CHANGE ME before being able to use this configuration! 14ac06724aSPaolo Bonzini# 15ac06724aSPaolo Bonzini# The guest will have a selection of VirtIO devices 16ac06724aSPaolo Bonzini# tailored towards optimal performance with modern guests, 17ac06724aSPaolo Bonzini# and will be accessed through the serial console. 18ac06724aSPaolo Bonzini# 19ac06724aSPaolo Bonzini# --------------------------------------------------------- 20ac06724aSPaolo Bonzini# 21ac06724aSPaolo Bonzini# Using -nodefaults is required to have full control over 22ac06724aSPaolo Bonzini# the virtual hardware: when it's specified, QEMU will 23ac06724aSPaolo Bonzini# populate the board with only the builtin peripherals, 24ac06724aSPaolo Bonzini# such as the PL011 UART, plus a PCI Express Root Bus; the 25ac06724aSPaolo Bonzini# user will then have to explicitly add further devices. 26ac06724aSPaolo Bonzini# 27ac06724aSPaolo Bonzini# The PCI Express Root Bus shows up in the guest as: 28ac06724aSPaolo Bonzini# 29ac06724aSPaolo Bonzini# 00:00.0 Host bridge 30ac06724aSPaolo Bonzini# 31ac06724aSPaolo Bonzini# This configuration file adds a number of other useful 32ac06724aSPaolo Bonzini# devices, more specifically: 33ac06724aSPaolo Bonzini# 34ac06724aSPaolo Bonzini# 00.1c.* PCI bridge (PCI Express Root Ports) 35ac06724aSPaolo Bonzini# 01:00.0 SCSI storage controller 36ac06724aSPaolo Bonzini# 02:00.0 Ethernet controller 37ac06724aSPaolo Bonzini# 38ac06724aSPaolo Bonzini# More information about these devices is available below. 39ac06724aSPaolo Bonzini# 40ac06724aSPaolo Bonzini# We use '-display none' to prevent QEMU from creating a 41ac06724aSPaolo Bonzini# graphical display window, which would serve no use in 42ac06724aSPaolo Bonzini# this specific configuration, and '-serial mon:stdio' to 43ac06724aSPaolo Bonzini# multiplex the guest's serial console and the QEMU monitor 44ac06724aSPaolo Bonzini# to the host's stdio; use 'Ctrl+A h' to learn how to 45ac06724aSPaolo Bonzini# switch between the two and more. 46ac06724aSPaolo Bonzini 47ac06724aSPaolo Bonzini 48ac06724aSPaolo Bonzini# Machine options 49ac06724aSPaolo Bonzini# ========================================================= 50ac06724aSPaolo Bonzini# 51ac06724aSPaolo Bonzini# We use the virt machine type and enable KVM acceleration 52ac06724aSPaolo Bonzini# for better performance. 53ac06724aSPaolo Bonzini# 54ac06724aSPaolo Bonzini# Using less than 1 GiB of memory is probably not going to 55ac06724aSPaolo Bonzini# yield good performance in the guest, and might even lead 56ac06724aSPaolo Bonzini# to obscure boot issues in some cases. 57ac06724aSPaolo Bonzini# 58ac06724aSPaolo Bonzini# Unfortunately, there is no way to configure the CPU model 59ac06724aSPaolo Bonzini# in this file, so it will have to be provided on the 60ac06724aSPaolo Bonzini# command line, but we can configure the guest to use the 61ac06724aSPaolo Bonzini# same GIC version as the host. 62ac06724aSPaolo Bonzini 63ac06724aSPaolo Bonzini[machine] 64ac06724aSPaolo Bonzini type = "virt" 65ac06724aSPaolo Bonzini gic-version = "host" 66ac06724aSPaolo Bonzini 67*4477035eSThomas Huth[accel] 68*4477035eSThomas Huth accel = "kvm" 69*4477035eSThomas Huth 70ac06724aSPaolo Bonzini[memory] 71ac06724aSPaolo Bonzini size = "1024" 72ac06724aSPaolo Bonzini 73ac06724aSPaolo Bonzini 74ac06724aSPaolo Bonzini# Firmware configuration 75ac06724aSPaolo Bonzini# ========================================================= 76ac06724aSPaolo Bonzini# 77ac06724aSPaolo Bonzini# There are two parts to the firmware: a read-only image 78ac06724aSPaolo Bonzini# containing the executable code, which is shared between 79ac06724aSPaolo Bonzini# guests, and a read/write variable store that is owned 80ac06724aSPaolo Bonzini# by one specific guest, exclusively, and is used to 81ac06724aSPaolo Bonzini# record information such as the UEFI boot order. 82ac06724aSPaolo Bonzini# 83ac06724aSPaolo Bonzini# For any new guest, its permanent, private variable store 84ac06724aSPaolo Bonzini# should initially be copied from the template file 85ac06724aSPaolo Bonzini# provided along with the firmware binary. 86ac06724aSPaolo Bonzini# 87ac06724aSPaolo Bonzini# Depending on the OS distribution you're using on the 88ac06724aSPaolo Bonzini# host, the name of the package containing the firmware 89ac06724aSPaolo Bonzini# binary and variable store template, as well as the paths 90ac06724aSPaolo Bonzini# to the files themselves, will be different. For example: 91ac06724aSPaolo Bonzini# 92ac06724aSPaolo Bonzini# Fedora 93ac06724aSPaolo Bonzini# edk2-aarch64 (pkg) 94ac06724aSPaolo Bonzini# /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw (bin) 95ac06724aSPaolo Bonzini# /usr/share/edk2/aarch64/vars-template-pflash.raw (var) 96ac06724aSPaolo Bonzini# 97ac06724aSPaolo Bonzini# RHEL 98ac06724aSPaolo Bonzini# AAVMF (pkg) 99ac06724aSPaolo Bonzini# /usr/share/AAVMF/AAVMF_CODE.fd (bin) 100ac06724aSPaolo Bonzini# /usr/share/AAVMF/AAVMF_VARS.fd (var) 101ac06724aSPaolo Bonzini# 102ac06724aSPaolo Bonzini# Debian/Ubuntu 103ac06724aSPaolo Bonzini# qemu-efi (pkg) 104ac06724aSPaolo Bonzini# /usr/share/AAVMF/AAVMF_CODE.fd (bin) 105ac06724aSPaolo Bonzini# /usr/share/AAVMF/AAVMF_VARS.fd (var) 106ac06724aSPaolo Bonzini 107ac06724aSPaolo Bonzini[drive "uefi-binary"] 108ac06724aSPaolo Bonzini file = "/usr/share/AAVMF/AAVMF_CODE.fd" # CHANGE ME 109ac06724aSPaolo Bonzini format = "raw" 110ac06724aSPaolo Bonzini if = "pflash" 111ac06724aSPaolo Bonzini unit = "0" 112ac06724aSPaolo Bonzini readonly = "on" 113ac06724aSPaolo Bonzini 114ac06724aSPaolo Bonzini[drive "uefi-varstore"] 115ac06724aSPaolo Bonzini file = "guest_VARS.fd" # CHANGE ME 116ac06724aSPaolo Bonzini format = "raw" 117ac06724aSPaolo Bonzini if = "pflash" 118ac06724aSPaolo Bonzini unit = "1" 119ac06724aSPaolo Bonzini 120ac06724aSPaolo Bonzini 121ac06724aSPaolo Bonzini# PCI bridge (PCI Express Root Ports) 122ac06724aSPaolo Bonzini# ========================================================= 123ac06724aSPaolo Bonzini# 124ac06724aSPaolo Bonzini# We create eight PCI Express Root Ports, and we plug them 125ac06724aSPaolo Bonzini# all into separate functions of the same slot. Some of 126ac06724aSPaolo Bonzini# them will be used by devices, the rest will remain 127ac06724aSPaolo Bonzini# available for hotplug. 128ac06724aSPaolo Bonzini 129ac06724aSPaolo Bonzini[device "pcie.1"] 130ac06724aSPaolo Bonzini driver = "pcie-root-port" 131ac06724aSPaolo Bonzini bus = "pcie.0" 132ac06724aSPaolo Bonzini addr = "1c.0" 133ac06724aSPaolo Bonzini port = "1" 134ac06724aSPaolo Bonzini chassis = "1" 135ac06724aSPaolo Bonzini multifunction = "on" 136ac06724aSPaolo Bonzini 137ac06724aSPaolo Bonzini[device "pcie.2"] 138ac06724aSPaolo Bonzini driver = "pcie-root-port" 139ac06724aSPaolo Bonzini bus = "pcie.0" 140ac06724aSPaolo Bonzini addr = "1c.1" 141ac06724aSPaolo Bonzini port = "2" 142ac06724aSPaolo Bonzini chassis = "2" 143ac06724aSPaolo Bonzini 144ac06724aSPaolo Bonzini[device "pcie.3"] 145ac06724aSPaolo Bonzini driver = "pcie-root-port" 146ac06724aSPaolo Bonzini bus = "pcie.0" 147ac06724aSPaolo Bonzini addr = "1c.2" 148ac06724aSPaolo Bonzini port = "3" 149ac06724aSPaolo Bonzini chassis = "3" 150ac06724aSPaolo Bonzini 151ac06724aSPaolo Bonzini[device "pcie.4"] 152ac06724aSPaolo Bonzini driver = "pcie-root-port" 153ac06724aSPaolo Bonzini bus = "pcie.0" 154ac06724aSPaolo Bonzini addr = "1c.3" 155ac06724aSPaolo Bonzini port = "4" 156ac06724aSPaolo Bonzini chassis = "4" 157ac06724aSPaolo Bonzini 158ac06724aSPaolo Bonzini[device "pcie.5"] 159ac06724aSPaolo Bonzini driver = "pcie-root-port" 160ac06724aSPaolo Bonzini bus = "pcie.0" 161ac06724aSPaolo Bonzini addr = "1c.4" 162ac06724aSPaolo Bonzini port = "5" 163ac06724aSPaolo Bonzini chassis = "5" 164ac06724aSPaolo Bonzini 165ac06724aSPaolo Bonzini[device "pcie.6"] 166ac06724aSPaolo Bonzini driver = "pcie-root-port" 167ac06724aSPaolo Bonzini bus = "pcie.0" 168ac06724aSPaolo Bonzini addr = "1c.5" 169ac06724aSPaolo Bonzini port = "6" 170ac06724aSPaolo Bonzini chassis = "6" 171ac06724aSPaolo Bonzini 172ac06724aSPaolo Bonzini[device "pcie.7"] 173ac06724aSPaolo Bonzini driver = "pcie-root-port" 174ac06724aSPaolo Bonzini bus = "pcie.0" 175ac06724aSPaolo Bonzini addr = "1c.6" 176ac06724aSPaolo Bonzini port = "7" 177ac06724aSPaolo Bonzini chassis = "7" 178ac06724aSPaolo Bonzini 179ac06724aSPaolo Bonzini[device "pcie.8"] 180ac06724aSPaolo Bonzini driver = "pcie-root-port" 181ac06724aSPaolo Bonzini bus = "pcie.0" 182ac06724aSPaolo Bonzini addr = "1c.7" 183ac06724aSPaolo Bonzini port = "8" 184ac06724aSPaolo Bonzini chassis = "8" 185ac06724aSPaolo Bonzini 186ac06724aSPaolo Bonzini 187ac06724aSPaolo Bonzini# SCSI storage controller (and storage) 188ac06724aSPaolo Bonzini# ========================================================= 189ac06724aSPaolo Bonzini# 190ac06724aSPaolo Bonzini# We use virtio-scsi here so that we can (hot)plug a large 191ac06724aSPaolo Bonzini# number of disks without running into issues; a SCSI disk, 192ac06724aSPaolo Bonzini# backed by a qcow2 disk image on the host's filesystem, is 193ac06724aSPaolo Bonzini# attached to it. 194ac06724aSPaolo Bonzini# 195ac06724aSPaolo Bonzini# We also create an optical disk, mostly for installation 1969277d81fSVille Skyttä# purposes: once the guest OS has been successfully 197ac06724aSPaolo Bonzini# installed, the guest will no longer boot from optical 198ac06724aSPaolo Bonzini# media. If you don't want, or no longer want, to have an 199ac06724aSPaolo Bonzini# optical disk in the guest you can safely comment out 200ac06724aSPaolo Bonzini# all relevant sections below. 201ac06724aSPaolo Bonzini 202ac06724aSPaolo Bonzini[device "scsi"] 203ac06724aSPaolo Bonzini driver = "virtio-scsi-pci" 204ac06724aSPaolo Bonzini bus = "pcie.1" 205ac06724aSPaolo Bonzini addr = "00.0" 206ac06724aSPaolo Bonzini 207ac06724aSPaolo Bonzini[device "scsi-disk"] 208ac06724aSPaolo Bonzini driver = "scsi-hd" 209ac06724aSPaolo Bonzini bus = "scsi.0" 210ac06724aSPaolo Bonzini drive = "disk" 211ac06724aSPaolo Bonzini bootindex = "1" 212ac06724aSPaolo Bonzini 213ac06724aSPaolo Bonzini[drive "disk"] 214ac06724aSPaolo Bonzini file = "guest.qcow2" # CHANGE ME 215ac06724aSPaolo Bonzini format = "qcow2" 216ac06724aSPaolo Bonzini if = "none" 217ac06724aSPaolo Bonzini 218ac06724aSPaolo Bonzini[device "scsi-optical-disk"] 219ac06724aSPaolo Bonzini driver = "scsi-cd" 220ac06724aSPaolo Bonzini bus = "scsi.0" 221ac06724aSPaolo Bonzini drive = "optical-disk" 222ac06724aSPaolo Bonzini bootindex = "2" 223ac06724aSPaolo Bonzini 224ac06724aSPaolo Bonzini[drive "optical-disk"] 225ac06724aSPaolo Bonzini file = "install.iso" # CHANGE ME 226ac06724aSPaolo Bonzini format = "raw" 227ac06724aSPaolo Bonzini if = "none" 228ac06724aSPaolo Bonzini 229ac06724aSPaolo Bonzini 230ac06724aSPaolo Bonzini# Ethernet controller 231ac06724aSPaolo Bonzini# ========================================================= 232ac06724aSPaolo Bonzini# 233ac06724aSPaolo Bonzini# We use virtio-net for improved performance over emulated 234ac06724aSPaolo Bonzini# hardware; on the host side, we take advantage of user 235ac06724aSPaolo Bonzini# networking so that the QEMU process doesn't require any 236ac06724aSPaolo Bonzini# additional privileges. 237ac06724aSPaolo Bonzini 238ac06724aSPaolo Bonzini[netdev "hostnet"] 239ac06724aSPaolo Bonzini type = "user" 240ac06724aSPaolo Bonzini 241ac06724aSPaolo Bonzini[device "net"] 242ac06724aSPaolo Bonzini driver = "virtio-net-pci" 243ac06724aSPaolo Bonzini netdev = "hostnet" 244ac06724aSPaolo Bonzini bus = "pcie.2" 245ac06724aSPaolo Bonzini addr = "00.0" 246