mirror of https://gitee.com/openkylin/qemu.git
scripts/qemu.py: support adding a console with the default serial device
The set_console() utility function either adds a device based on the explicitly given device type, or adds a known good type of device based on the machine type. But, for a number of machine types, it may be impossible or inconvenient to add the devices by means of "-device" command line options, and then it may better to just use the "-serial" option and let QEMU itself, based on the machine type, set the device accordingly. To achieve that, the behavior of set_console() now flags the intention to add a console device on launch(), and if no explicit device type is given the "-serial" option is going to be added to the QEMU command line, instead of raising exceptions. Based on testing with different machine types, the CONSOLE_DEV_TYPES is not necessary anymore, so it's being removed, as is the logic to use it. Signed-off-by: Cleber Rosa <crosa@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Message-Id: <20190312171824.5134-13-crosa@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
0d1d74e5e5
commit
123990adbf
|
@ -41,17 +41,6 @@ def kvm_available(target_arch=None):
|
|||
return os.access("/dev/kvm", os.R_OK | os.W_OK)
|
||||
|
||||
|
||||
#: Maps machine types to the preferred console device types
|
||||
CONSOLE_DEV_TYPES = {
|
||||
r'^clipper$': 'isa-serial',
|
||||
r'^malta': 'isa-serial',
|
||||
r'^(pc.*|q35.*|isapc)$': 'isa-serial',
|
||||
r'^(40p|powernv|prep)$': 'isa-serial',
|
||||
r'^pseries.*': 'spapr-vty',
|
||||
r'^s390-ccw-virtio.*': 'sclpconsole',
|
||||
}
|
||||
|
||||
|
||||
class QEMUMachineError(Exception):
|
||||
"""
|
||||
Exception called when an error in QEMUMachine happens.
|
||||
|
@ -130,6 +119,7 @@ def __init__(self, binary, args=None, wrapper=None, name=None,
|
|||
self._temp_dir = None
|
||||
self._launched = False
|
||||
self._machine = None
|
||||
self._console_set = False
|
||||
self._console_device_type = None
|
||||
self._console_address = None
|
||||
self._console_socket = None
|
||||
|
@ -248,13 +238,17 @@ def _base_args(self):
|
|||
'-display', 'none', '-vga', 'none']
|
||||
if self._machine is not None:
|
||||
args.extend(['-machine', self._machine])
|
||||
if self._console_device_type is not None:
|
||||
if self._console_set:
|
||||
self._console_address = os.path.join(self._temp_dir,
|
||||
self._name + "-console.sock")
|
||||
chardev = ('socket,id=console,path=%s,server,nowait' %
|
||||
self._console_address)
|
||||
device = '%s,chardev=console' % self._console_device_type
|
||||
args.extend(['-chardev', chardev, '-device', device])
|
||||
args.extend(['-chardev', chardev])
|
||||
if self._console_device_type is None:
|
||||
args.extend(['-serial', 'chardev:console'])
|
||||
else:
|
||||
device = '%s,chardev=console' % self._console_device_type
|
||||
args.extend(['-device', device])
|
||||
return args
|
||||
|
||||
def _pre_launch(self):
|
||||
|
@ -480,30 +474,20 @@ def set_console(self, device_type=None):
|
|||
line.
|
||||
|
||||
This is a convenience method that will either use the provided
|
||||
device type, of if not given, it will used the device type set
|
||||
on CONSOLE_DEV_TYPES.
|
||||
device type, or default to a "-serial chardev:console" command
|
||||
line argument.
|
||||
|
||||
The actual setting of command line arguments will be be done at
|
||||
machine launch time, as it depends on the temporary directory
|
||||
to be created.
|
||||
|
||||
@param device_type: the device type, such as "isa-serial"
|
||||
@raises: QEMUMachineAddDeviceError if the device type is not given
|
||||
and can not be determined.
|
||||
@param device_type: the device type, such as "isa-serial". If
|
||||
None is given (the default value) a "-serial
|
||||
chardev:console" command line argument will
|
||||
be used instead, resorting to the machine's
|
||||
default device type.
|
||||
"""
|
||||
if device_type is None:
|
||||
if self._machine is None:
|
||||
raise QEMUMachineAddDeviceError("Can not add a console device:"
|
||||
" QEMU instance without a "
|
||||
"defined machine type")
|
||||
for regex, device in CONSOLE_DEV_TYPES.items():
|
||||
if re.match(regex, self._machine):
|
||||
device_type = device
|
||||
break
|
||||
if device_type is None:
|
||||
raise QEMUMachineAddDeviceError("Can not add a console device:"
|
||||
" no matching console device "
|
||||
"type definition")
|
||||
self._console_set = True
|
||||
self._console_device_type = device_type
|
||||
|
||||
@property
|
||||
|
|
Loading…
Reference in New Issue