1*9ca019c1SAndrea Bolognani# q35 - VirtIO guest (graphical console) 2*9ca019c1SAndrea Bolognani# ========================================================= 3*9ca019c1SAndrea Bolognani# 4*9ca019c1SAndrea Bolognani# Usage: 5*9ca019c1SAndrea Bolognani# 6*9ca019c1SAndrea Bolognani# $ qemu-system-x86_64 \ 7*9ca019c1SAndrea Bolognani# -nodefaults \ 8*9ca019c1SAndrea Bolognani# -readconfig q35-virtio-graphical.cfg 9*9ca019c1SAndrea Bolognani# 10*9ca019c1SAndrea Bolognani# You will probably need to tweak the lines marked as 11*9ca019c1SAndrea Bolognani# CHANGE ME before being able to use this configuration! 12*9ca019c1SAndrea Bolognani# 13*9ca019c1SAndrea Bolognani# The guest will have a selection of VirtIO devices 14*9ca019c1SAndrea Bolognani# tailored towards optimal performance with modern guests, 15*9ca019c1SAndrea Bolognani# and will be accessed through a graphical console. 16*9ca019c1SAndrea Bolognani# 17*9ca019c1SAndrea Bolognani# --------------------------------------------------------- 18*9ca019c1SAndrea Bolognani# 19*9ca019c1SAndrea Bolognani# Using -nodefaults is required to have full control over 20*9ca019c1SAndrea Bolognani# the virtual hardware: when it's specified, QEMU will 21*9ca019c1SAndrea Bolognani# populate the board with only the builtin peripherals 22*9ca019c1SAndrea Bolognani# plus a small selection of core PCI devices and 23*9ca019c1SAndrea Bolognani# controllers; the user will then have to explicitly add 24*9ca019c1SAndrea Bolognani# further devices. 25*9ca019c1SAndrea Bolognani# 26*9ca019c1SAndrea Bolognani# The core PCI devices show up in the guest as: 27*9ca019c1SAndrea Bolognani# 28*9ca019c1SAndrea Bolognani# 00:00.0 Host bridge 29*9ca019c1SAndrea Bolognani# 00:1f.0 ISA bridge / LPC 30*9ca019c1SAndrea Bolognani# 00:1f.2 SATA (AHCI) controller 31*9ca019c1SAndrea Bolognani# 00:1f.3 SMBus controller 32*9ca019c1SAndrea Bolognani# 33*9ca019c1SAndrea Bolognani# This configuration file adds a number of other useful 34*9ca019c1SAndrea Bolognani# devices, more specifically: 35*9ca019c1SAndrea Bolognani# 36*9ca019c1SAndrea Bolognani# 00:01.0 VGA compatible controller 37*9ca019c1SAndrea Bolognani# 00:1b.0 Audio device 38*9ca019c1SAndrea Bolognani# 00.1c.* PCI bridge (PCI Express Root Ports) 39*9ca019c1SAndrea Bolognani# 01:00.0 SCSI storage controller 40*9ca019c1SAndrea Bolognani# 02:00.0 Ethernet controller 41*9ca019c1SAndrea Bolognani# 03:00.0 USB controller 42*9ca019c1SAndrea Bolognani# 43*9ca019c1SAndrea Bolognani# More information about these devices is available below. 44*9ca019c1SAndrea Bolognani 45*9ca019c1SAndrea Bolognani 46*9ca019c1SAndrea Bolognani# Machine options 47*9ca019c1SAndrea Bolognani# ========================================================= 48*9ca019c1SAndrea Bolognani# 49*9ca019c1SAndrea Bolognani# We use the q35 machine type and enable KVM acceleration 50*9ca019c1SAndrea Bolognani# for better performance. 51*9ca019c1SAndrea Bolognani# 52*9ca019c1SAndrea Bolognani# Using less than 1 GiB of memory is probably not going to 53*9ca019c1SAndrea Bolognani# yield good performance in the guest, and might even lead 54*9ca019c1SAndrea Bolognani# to obscure boot issues in some cases. 55*9ca019c1SAndrea Bolognani 56*9ca019c1SAndrea Bolognani[machine] 57*9ca019c1SAndrea Bolognani type = "q35" 58*9ca019c1SAndrea Bolognani accel = "kvm" 59*9ca019c1SAndrea Bolognani 60*9ca019c1SAndrea Bolognani[memory] 61*9ca019c1SAndrea Bolognani size = "1024" 62*9ca019c1SAndrea Bolognani 63*9ca019c1SAndrea Bolognani 64*9ca019c1SAndrea Bolognani# PCI bridge (PCI Express Root Ports) 65*9ca019c1SAndrea Bolognani# ========================================================= 66*9ca019c1SAndrea Bolognani# 67*9ca019c1SAndrea Bolognani# We create eight PCI Express Root Ports, and we plug them 68*9ca019c1SAndrea Bolognani# all into separate functions of the same slot. Some of 69*9ca019c1SAndrea Bolognani# them will be used by devices, the rest will remain 70*9ca019c1SAndrea Bolognani# available for hotplug. 71*9ca019c1SAndrea Bolognani 72*9ca019c1SAndrea Bolognani[device "pcie.1"] 73*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 74*9ca019c1SAndrea Bolognani bus = "pcie.0" 75*9ca019c1SAndrea Bolognani addr = "1c.0" 76*9ca019c1SAndrea Bolognani port = "1" 77*9ca019c1SAndrea Bolognani chassis = "1" 78*9ca019c1SAndrea Bolognani multifunction = "on" 79*9ca019c1SAndrea Bolognani 80*9ca019c1SAndrea Bolognani[device "pcie.2"] 81*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 82*9ca019c1SAndrea Bolognani bus = "pcie.0" 83*9ca019c1SAndrea Bolognani addr = "1c.1" 84*9ca019c1SAndrea Bolognani port = "2" 85*9ca019c1SAndrea Bolognani chassis = "2" 86*9ca019c1SAndrea Bolognani 87*9ca019c1SAndrea Bolognani[device "pcie.3"] 88*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 89*9ca019c1SAndrea Bolognani bus = "pcie.0" 90*9ca019c1SAndrea Bolognani addr = "1c.2" 91*9ca019c1SAndrea Bolognani port = "3" 92*9ca019c1SAndrea Bolognani chassis = "3" 93*9ca019c1SAndrea Bolognani 94*9ca019c1SAndrea Bolognani[device "pcie.4"] 95*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 96*9ca019c1SAndrea Bolognani bus = "pcie.0" 97*9ca019c1SAndrea Bolognani addr = "1c.3" 98*9ca019c1SAndrea Bolognani port = "4" 99*9ca019c1SAndrea Bolognani chassis = "4" 100*9ca019c1SAndrea Bolognani 101*9ca019c1SAndrea Bolognani[device "pcie.5"] 102*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 103*9ca019c1SAndrea Bolognani bus = "pcie.0" 104*9ca019c1SAndrea Bolognani addr = "1c.4" 105*9ca019c1SAndrea Bolognani port = "5" 106*9ca019c1SAndrea Bolognani chassis = "5" 107*9ca019c1SAndrea Bolognani 108*9ca019c1SAndrea Bolognani[device "pcie.6"] 109*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 110*9ca019c1SAndrea Bolognani bus = "pcie.0" 111*9ca019c1SAndrea Bolognani addr = "1c.5" 112*9ca019c1SAndrea Bolognani port = "6" 113*9ca019c1SAndrea Bolognani chassis = "6" 114*9ca019c1SAndrea Bolognani 115*9ca019c1SAndrea Bolognani[device "pcie.7"] 116*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 117*9ca019c1SAndrea Bolognani bus = "pcie.0" 118*9ca019c1SAndrea Bolognani addr = "1c.6" 119*9ca019c1SAndrea Bolognani port = "7" 120*9ca019c1SAndrea Bolognani chassis = "7" 121*9ca019c1SAndrea Bolognani 122*9ca019c1SAndrea Bolognani[device "pcie.8"] 123*9ca019c1SAndrea Bolognani driver = "pcie-root-port" 124*9ca019c1SAndrea Bolognani bus = "pcie.0" 125*9ca019c1SAndrea Bolognani addr = "1c.7" 126*9ca019c1SAndrea Bolognani port = "8" 127*9ca019c1SAndrea Bolognani chassis = "8" 128*9ca019c1SAndrea Bolognani 129*9ca019c1SAndrea Bolognani 130*9ca019c1SAndrea Bolognani# SCSI storage controller (and storage) 131*9ca019c1SAndrea Bolognani# ========================================================= 132*9ca019c1SAndrea Bolognani# 133*9ca019c1SAndrea Bolognani# We use virtio-scsi here so that we can (hot)plug a large 134*9ca019c1SAndrea Bolognani# number of disks without running into issues; a SCSI disk, 135*9ca019c1SAndrea Bolognani# backed by a qcow2 disk image on the host's filesystem, is 136*9ca019c1SAndrea Bolognani# attached to it. 137*9ca019c1SAndrea Bolognani# 138*9ca019c1SAndrea Bolognani# We also create an optical disk, mostly for installation 139*9ca019c1SAndrea Bolognani# purposes: once the guest OS has been succesfully 140*9ca019c1SAndrea Bolognani# installed, the guest will no longer boot from optical 141*9ca019c1SAndrea Bolognani# media. If you don't want, or no longer want, to have an 142*9ca019c1SAndrea Bolognani# optical disk in the guest you can safely comment out 143*9ca019c1SAndrea Bolognani# all relevant sections below. 144*9ca019c1SAndrea Bolognani 145*9ca019c1SAndrea Bolognani[device "scsi"] 146*9ca019c1SAndrea Bolognani driver = "virtio-scsi-pci" 147*9ca019c1SAndrea Bolognani bus = "pcie.1" 148*9ca019c1SAndrea Bolognani addr = "00.0" 149*9ca019c1SAndrea Bolognani 150*9ca019c1SAndrea Bolognani[device "scsi-disk"] 151*9ca019c1SAndrea Bolognani driver = "scsi-hd" 152*9ca019c1SAndrea Bolognani bus = "scsi.0" 153*9ca019c1SAndrea Bolognani drive = "disk" 154*9ca019c1SAndrea Bolognani bootindex = "1" 155*9ca019c1SAndrea Bolognani 156*9ca019c1SAndrea Bolognani[drive "disk"] 157*9ca019c1SAndrea Bolognani file = "guest.qcow2" # CHANGE ME 158*9ca019c1SAndrea Bolognani format = "qcow2" 159*9ca019c1SAndrea Bolognani if = "none" 160*9ca019c1SAndrea Bolognani 161*9ca019c1SAndrea Bolognani[device "scsi-optical-disk"] 162*9ca019c1SAndrea Bolognani driver = "scsi-cd" 163*9ca019c1SAndrea Bolognani bus = "scsi.0" 164*9ca019c1SAndrea Bolognani drive = "optical-disk" 165*9ca019c1SAndrea Bolognani bootindex = "2" 166*9ca019c1SAndrea Bolognani 167*9ca019c1SAndrea Bolognani[drive "optical-disk"] 168*9ca019c1SAndrea Bolognani file = "install.iso" # CHANGE ME 169*9ca019c1SAndrea Bolognani format = "raw" 170*9ca019c1SAndrea Bolognani if = "none" 171*9ca019c1SAndrea Bolognani 172*9ca019c1SAndrea Bolognani 173*9ca019c1SAndrea Bolognani# Ethernet controller 174*9ca019c1SAndrea Bolognani# ========================================================= 175*9ca019c1SAndrea Bolognani# 176*9ca019c1SAndrea Bolognani# We use virtio-net for improved performance over emulated 177*9ca019c1SAndrea Bolognani# hardware; on the host side, we take advantage of user 178*9ca019c1SAndrea Bolognani# networking so that the QEMU process doesn't require any 179*9ca019c1SAndrea Bolognani# additional privileges. 180*9ca019c1SAndrea Bolognani 181*9ca019c1SAndrea Bolognani[netdev "hostnet"] 182*9ca019c1SAndrea Bolognani type = "user" 183*9ca019c1SAndrea Bolognani 184*9ca019c1SAndrea Bolognani[device "net"] 185*9ca019c1SAndrea Bolognani driver = "virtio-net-pci" 186*9ca019c1SAndrea Bolognani netdev = "hostnet" 187*9ca019c1SAndrea Bolognani bus = "pcie.2" 188*9ca019c1SAndrea Bolognani addr = "00.0" 189*9ca019c1SAndrea Bolognani 190*9ca019c1SAndrea Bolognani 191*9ca019c1SAndrea Bolognani# USB controller (and input devices) 192*9ca019c1SAndrea Bolognani# ========================================================= 193*9ca019c1SAndrea Bolognani# 194*9ca019c1SAndrea Bolognani# We add a virtualization-friendly USB 3.0 controller and 195*9ca019c1SAndrea Bolognani# a USB tablet so that graphical guests can be controlled 196*9ca019c1SAndrea Bolognani# appropriately. A USB keyboard is not needed, as q35 197*9ca019c1SAndrea Bolognani# guests get a PS/2 one added automatically. 198*9ca019c1SAndrea Bolognani 199*9ca019c1SAndrea Bolognani[device "usb"] 200*9ca019c1SAndrea Bolognani driver = "nec-usb-xhci" 201*9ca019c1SAndrea Bolognani bus = "pcie.3" 202*9ca019c1SAndrea Bolognani addr = "00.0" 203*9ca019c1SAndrea Bolognani 204*9ca019c1SAndrea Bolognani[device "tablet"] 205*9ca019c1SAndrea Bolognani driver = "usb-tablet" 206*9ca019c1SAndrea Bolognani bus = "usb.0" 207*9ca019c1SAndrea Bolognani 208*9ca019c1SAndrea Bolognani 209*9ca019c1SAndrea Bolognani# VGA compatible controller 210*9ca019c1SAndrea Bolognani# ========================================================= 211*9ca019c1SAndrea Bolognani# 212*9ca019c1SAndrea Bolognani# We plug the QXL video card directly into the PCI Express 213*9ca019c1SAndrea Bolognani# Root Bus as it is a legacy PCI device; this way, we can 214*9ca019c1SAndrea Bolognani# reduce the number of PCI Express controllers in the 215*9ca019c1SAndrea Bolognani# guest. 216*9ca019c1SAndrea Bolognani# 217*9ca019c1SAndrea Bolognani# If you're running the guest on a remote, potentially 218*9ca019c1SAndrea Bolognani# headless host, you will probably want to append something 219*9ca019c1SAndrea Bolognani# like 220*9ca019c1SAndrea Bolognani# 221*9ca019c1SAndrea Bolognani# -display vnc=127.0.0.1:0 222*9ca019c1SAndrea Bolognani# 223*9ca019c1SAndrea Bolognani# to the command line in order to prevent QEMU from 224*9ca019c1SAndrea Bolognani# creating a graphical display window on the host and 225*9ca019c1SAndrea Bolognani# enable remote access instead. 226*9ca019c1SAndrea Bolognani 227*9ca019c1SAndrea Bolognani[device "video"] 228*9ca019c1SAndrea Bolognani driver = "qxl-vga" 229*9ca019c1SAndrea Bolognani bus = "pcie.0" 230*9ca019c1SAndrea Bolognani addr = "01.0" 231*9ca019c1SAndrea Bolognani 232*9ca019c1SAndrea Bolognani 233*9ca019c1SAndrea Bolognani# Audio device 234*9ca019c1SAndrea Bolognani# ========================================================= 235*9ca019c1SAndrea Bolognani# 236*9ca019c1SAndrea Bolognani# Like the video card, the sound card is a legacy PCI 237*9ca019c1SAndrea Bolognani# device and as such can be plugged directly into the PCI 238*9ca019c1SAndrea Bolognani# Express Root Bus. 239*9ca019c1SAndrea Bolognani 240*9ca019c1SAndrea Bolognani[device "sound"] 241*9ca019c1SAndrea Bolognani driver = "ich9-intel-hda" 242*9ca019c1SAndrea Bolognani bus = "pcie.0" 243*9ca019c1SAndrea Bolognani addr = "1b.0" 244*9ca019c1SAndrea Bolognani 245*9ca019c1SAndrea Bolognani[device "duplex"] 246*9ca019c1SAndrea Bolognani driver = "hda-duplex" 247*9ca019c1SAndrea Bolognani bus = "sound.0" 248*9ca019c1SAndrea Bolognani cad = "0" 249