xref: /qemu/docs/config/q35-virtio-graphical.cfg (revision 9ca019c1dd57d53be30d1681f15c2ff8ddd64dbe)
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