diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-04-13 15:45:03 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-04-14 09:47:00 +0100 |
commit | 0be2abfe7c9e249da4c237c12925c507d569e2e4 (patch) | |
tree | 0f64c932766734defb507ad87b84b2afa2319068 /scripts | |
parent | 4f7717ae09cd7fc7877fd8c733d1bda9c888e129 (diff) | |
download | poky-0be2abfe7c9e249da4c237c12925c507d569e2e4.tar.gz |
runqemu: Allow auto detection of the correct graphics options
Running "runqemu qemux86 kvm" when qemu is configured for sdl and/or gtk
display output currently leads to a poor user experience with no cursor
and corrupted fonts in the gtk case. This is due to no options being
passed to qemu which leads to the loss of the font envirornment variable
and the show-cursor option.
If the user hasn't specified a display type, grep the output of
"qemu-system-xxx --help" for the display types and pick the "best"
which ensures our config is passed in. That resolves the gtk font issue
and the cursor issue with both sdl and gtk.
(From OE-Core rev: 7f78bb7a7baf67b9226fb460ca9e12fde6ef40c8)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/runqemu | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/scripts/runqemu b/scripts/runqemu index 2f77a7bd0f..36af764b1b 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
@@ -1363,13 +1363,27 @@ class BaseConfig(object): | |||
1363 | if (self.gl_es == True or self.gl == True) and (self.sdl == False and self.gtk == False): | 1363 | if (self.gl_es == True or self.gl == True) and (self.sdl == False and self.gtk == False): |
1364 | raise RunQemuError('Option gl/gl-es needs gtk or sdl option.') | 1364 | raise RunQemuError('Option gl/gl-es needs gtk or sdl option.') |
1365 | 1365 | ||
1366 | if self.sdl == True or self.gtk == True or self.egl_headless == True: | 1366 | # If we have no display option, we autodetect based upon what qemu supports. We |
1367 | if self.gl or self.gl_es or self.egl_headless: | 1367 | # need our font setup and show-cusor below so we need to see what qemu --help says |
1368 | self.qemu_opt += ' -device virtio-vga-gl ' | 1368 | # is supported so we can pass our correct config in. |
1369 | if not self.nographic and not self.sdl and not self.gtk and not self.egl_headless == True: | ||
1370 | output = subprocess.check_output([self.qemu_bin, "--help"], universal_newlines=True) | ||
1371 | if "-display gtk" in output: | ||
1372 | self.gtk = True | ||
1373 | elif "-display sdl" in output: | ||
1374 | self.sdl = True | ||
1369 | else: | 1375 | else: |
1370 | self.qemu_opt += ' -device virtio-vga ' | 1376 | self.qemu_opt += '-display none' |
1371 | 1377 | ||
1372 | self.qemu_opt += '-display ' | 1378 | if self.sdl == True or self.gtk == True or self.egl_headless == True: |
1379 | |||
1380 | if self.qemu_system.endswith(('i386', 'x86_64')): | ||
1381 | if self.gl or self.gl_es or self.egl_headless: | ||
1382 | self.qemu_opt += ' -device virtio-vga-gl ' | ||
1383 | else: | ||
1384 | self.qemu_opt += ' -device virtio-vga ' | ||
1385 | |||
1386 | self.qemu_opt += ' -display ' | ||
1373 | if self.egl_headless == True: | 1387 | if self.egl_headless == True: |
1374 | self.set_dri_path() | 1388 | self.set_dri_path() |
1375 | self.qemu_opt += 'egl-headless,' | 1389 | self.qemu_opt += 'egl-headless,' |
@@ -1415,7 +1429,7 @@ class BaseConfig(object): | |||
1415 | if serial_num < 2: | 1429 | if serial_num < 2: |
1416 | self.qemu_opt += " -serial null" | 1430 | self.qemu_opt += " -serial null" |
1417 | 1431 | ||
1418 | def setup_final(self): | 1432 | def find_qemu(self): |
1419 | qemu_bin = os.path.join(self.bindir_native, self.qemu_system) | 1433 | qemu_bin = os.path.join(self.bindir_native, self.qemu_system) |
1420 | 1434 | ||
1421 | # It is possible to have qemu-native in ASSUME_PROVIDED, and it won't | 1435 | # It is possible to have qemu-native in ASSUME_PROVIDED, and it won't |
@@ -1434,8 +1448,13 @@ class BaseConfig(object): | |||
1434 | 1448 | ||
1435 | if not os.access(qemu_bin, os.X_OK): | 1449 | if not os.access(qemu_bin, os.X_OK): |
1436 | raise OEPathError("No QEMU binary '%s' could be found" % qemu_bin) | 1450 | raise OEPathError("No QEMU binary '%s' could be found" % qemu_bin) |
1451 | self.qemu_bin = qemu_bin | ||
1452 | |||
1453 | def setup_final(self): | ||
1454 | |||
1455 | self.find_qemu() | ||
1437 | 1456 | ||
1438 | self.qemu_opt = "%s %s %s %s %s" % (qemu_bin, self.get('NETWORK_CMD'), self.get('QB_RNG'), self.get('ROOTFS_OPTIONS'), self.get('QB_OPT_APPEND').replace('@DEPLOY_DIR_IMAGE@', self.get('DEPLOY_DIR_IMAGE'))) | 1457 | self.qemu_opt = "%s %s %s %s %s" % (self.qemu_bin, self.get('NETWORK_CMD'), self.get('QB_RNG'), self.get('ROOTFS_OPTIONS'), self.get('QB_OPT_APPEND').replace('@DEPLOY_DIR_IMAGE@', self.get('DEPLOY_DIR_IMAGE'))) |
1439 | 1458 | ||
1440 | for ovmf in self.ovmf_bios: | 1459 | for ovmf in self.ovmf_bios: |
1441 | format = ovmf.rsplit('.', 1)[-1] | 1460 | format = ovmf.rsplit('.', 1)[-1] |