Our current documentation is missing some information and doesn't do a great job at explaining how the <serial> and <console> elements are connected. Let's try to fix that. Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx> --- docs/formatdomain.html.in | 230 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 172 insertions(+), 58 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index fd85b7633..2abbadd53 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -6518,80 +6518,81 @@ qemu-kvm -net nic,model=? /dev/null <pre> ... <devices> + <!-- Serial port --> <serial type='pty'> <source path='/dev/pts/3'/> <target port='0'/> </serial> </devices> +...</pre> + +<pre> +... +<devices> + <!-- USB serial port --> + <serial type='pty'> + <target type='usb' port='0'> + <model name='usb-serial'/> + </target> + <address type='usb' bus='0' port='1'/> + </serial> +</devices> ...</pre> <p> - <code>target</code> can have a <code>port</code> attribute, which - specifies the port number. Ports are numbered starting from 0. There are - usually 0, 1 or 2 serial ports. There is also an optional - <code>type</code> attribute <span class="since">since 1.0.2</span> - which can be used to pick between <code>isa</code>, <code>usb</code>, - <code>pci</code> and, <span class="since">since 3.10.0</span>, - <code>spapr-vio</code>, <code>system</code> and <code>sclp</code>. - Some values are not compatible with all architecture and machine types; - if the value is missing altogether, libvirt will try to pick an - appropriate default. - For <code>usb</code> an optional sub-element - <code><address/></code> with <code>type='usb'</code> can tie the - device to a particular controller, <a href="#elementsAddress">documented above</a>. - Similarly, <code>pci</code> can be used to attach the device to - the pci bus (<span class="since">since 1.2.16</span>). Again, it has - optional sub-element <code><address/></code> with - <code>type='pci'</code> to select desired location on the PCI bus. + The <code>target</code> element can have an optional <code>port</code> + attribute, which specifies the port number (starting from 0), and an + optional <code>type</code> attribute which indicates what bus the + serial device is connected to: + <span class="since">since 3.10.0</span>, valid values are + <code>isa</code>, <code>usb</code>, <code>pci</code>, + <code>spapr-vio</code>, <code>system</code> and <code>sclp</code>; for + backwards compatibility, <code>isa-serial</code>, + <code>usb-serial</code> and <code>pci-serial</code> (available + <span class="since">since 1.0.2</span>) are accepted as well. </p> - <h6><a id="elementCharConsole">Console</a></h6> - <p> - The console element is used to represent interactive consoles. Depending - on the type of guest in use, the consoles might be paravirtualized devices, - or they might be a clone of a serial device, according to the following - rules: + <span class="since">Since 3.10.0</span>, the <code>target</code> + element can have an optional <code>model</code> subelement, whose + <code>name</code> attribute can be used to choose the concrete, + hypervisor-specific device name: valid values are + <code>isa-serial</code>, <code>usb-serial</code>, + <code>pci-serial</code>, <code>spapr-vty</code>, <code>pl011</code>, + <code>sclpconsole</code> and <code>sclplmconsole</code>. </p> - <ul> - <li>If no <code>targetType</code> attribute is set, then the default - device type is according to the hypervisor's rules. The default - type will be added when re-querying the XML fed into libvirt. - For fully virtualized guests, the default device type will usually - be a serial port.</li> - <li>If the <code>targetType</code> attribute is <code>serial</code>, - then if no <code><serial></code> element exists, the console - element will be copied to the serial element. If a <code><serial></code> - element does already exist, the console element will be ignored.</li> - <li>If the <code>targetType</code> attribute is not <code>serial</code>, - it will be treated normally.</li> - <li>Only the first <code>console</code> element may use a <code>targetType</code> - of <code>serial</code>. Secondary consoles must all be paravirtualized. - </li> - <li>On S390, the <code>console</code> element may use a - <code>targetType</code> of <code>sclp</code> or <code>sclplm</code> - (line mode). SCLP is the native console type for S390. There's no - controller associated to SCLP consoles. - <span class="since">Since 1.0.2</span> - </li> - </ul> + <p> + Some of the values listed above are not compatible with all + architecture and machine types, and if the value is missing altogether, + libvirt will try to pick an appropriate default. In general, it's a + good idea to specify neither the target type nor the target model, + leave the task of choosing values up to libvirt, and don't change the + values afterward. + </p> <p> - A virtio console device is exposed in the - guest as /dev/hvc[0-7] (for more information, see - <a href="http://fedoraproject.org/wiki/Features/VirtioSerial">http://fedoraproject.org/wiki/Features/VirtioSerial</a>) - <span class="since">Since 0.8.3</span> + Some of the types support configuring the guest-visible device + address as <a href="#elementsAddress">documented above</a>. + For the relationship between serial ports and consoles, + <a href="#elementCharSerialAndConsole">see below</a>. </p> + <h6><a id="elementCharConsole">Console</a></h6> + <pre> ... <devices> + <!-- Serial console --> <console type='pty'> - <source path='/dev/pts/4'/> - <target port='0'/> + <source path='/dev/pts/2'/> + <target type='serial' port='0'/> </console> +</devices> +...</pre> +<pre> +... <!-- KVM virtio console --> <console type='pty'> <source path='/dev/pts/5'/> @@ -6600,21 +6601,134 @@ qemu-kvm -net nic,model=? /dev/null </devices> ...</pre> + <p> + The <code>console</code> element is used to represent interactive + serial consoles. Depending on the type of guest in use and the specifics + of the configuration, the <code>console</code> element might represent + the same device as an existing <code>serial</code> element or a separate + device. + </p> + + <p> + A <code>target</code> subelement is supported and works the same way + as with the <code>serial</code> element + (<a href="#elementCharSerial">see above</a> for details); valid values + for the <code>type</code> attribute are <code>serial</code>, + <code>virtio</code>, <code>xen</code>, <code>lxc</code>, + <code>uml</code> and <code>openvz</code>. The <code>sclp</code> and + <code>sclplm</code> values are supported for compatibility reasons but + should not be used for new guests: use the <code>sclpconsole</code> + and <code>sclplmconsole</code> target models, respectively, with the + <code>serial</code> element instead. + </p> + + <p> + Of the target types listed above, <code>serial</code> is special in + that it doesn't represents a separate device, but rather the same + device as the first <code>serial</code> element. Due to this, there can + only be a single <code>console</code> element with target type + <code>serial</code> per guest. + </p> + + <p> + Virtio consoles are usually accessible as <code>/dev/hvc[0-7]</code> + from inside the guest; for more information, see + <a href="http://fedoraproject.org/wiki/Features/VirtioSerial">http://fedoraproject.org/wiki/Features/VirtioSerial</a>. + <span class="since">Since 0.8.3</span> + </p> + + <p> + For the relationship between serial ports and consoles, + <a href="#elementCharSerialAndConsole">see below</a>. + </p> + + <h6><a id="elementCharSerialAndConsole">Relationship between serial ports and consoles</a></h6> + + <p> + Due to hystorical reasons, the <code>serial</code> and + <code>console</code> elements have partially overlapping scopes. + </p> + + <p> + In general, both elements are used to configure one or more serial + consoles to be used for interacting with the guest. The main difference + between the two is that <code>serial</code> is used for emulated, + usually native, serial consoles, whereas <code>console</code> is used + for paravirtualized ones. + </p> + + <p> + Both emulated and paravirtualized serial consoles have advantages and + disadvantages: + </p> + + <ul> + <li> + emulated serial consoles are usually initialized much earlier than + paravirtualized ones, so they can be used to control the bootloader + and display both firmware and early boot messages; + </li> + <li> + on several platforms, there can only be a single emulated serial + console per guest but paravirtualized consoles don't suffer from the + same limitation. + </li> + </ul> + + <p> + A configuration such as: + </p> + <pre> ... -<devices> - <!-- KVM S390 sclp console --> +</devices> + <console type='pty'> + <target type='serial'/> + </console> <console type='pty'> - <source path='/dev/pts/1'/> - <target type='sclp' port='0'/> + <target type='virtio'/> </console> </devices> ...</pre> <p> - If the console is presented as a serial port, the <code>target</code> - element has the same attributes as for a serial port. There is usually - only 1 console. + will work on any platform and will result in one emulated serial console + for early boot logging / interactive / recovery use, and one + paravirtualized serial console to be used eg. as a side channel. Most + people will be fine with having just the first <code>console</code> + element in their configuration. + </p> + + <p> + Note that, due to the compatibility concerns mentioned earlier, all the + following configurations: + </p> + +<pre> +... +</devices> + <serial type='pty'/> +</devices> +...</pre> + +<pre> +... +</devices> + <console type='pty'/> +</devices> +...</pre> + +<pre> +... +</devices> + <serial type='pty'/> + <console type='pty'/> +</devices> +...</pre> + + <p> + will be treated the same and will result in a single emulated serial + console being available to the guest. </p> <h6><a id="elementCharChannel">Channel</a></h6> -- 2.14.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list