scripts/runqemu: move render nodes check to runqemu from selftest

This will produce a more useful hint for those setting
up or testing virgl headless:

runqemu - ERROR - No render nodes found in /dev/dri: ['by-path', 'card0']. If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer.

as qemu itself isn't helpful:

alex@Zen2:/srv/storage/alex/yocto/build-64-alt$ qemu-system-x86_64 -display egl-headless
qemu-system-x86_64: egl: no drm render node available
qemu-system-x86_64: egl: render node init failed

(From OE-Core rev: cbbada6a6c9b0a2e97f7395117dad986555f2db9)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin 2023-02-27 12:40:08 +01:00 committed by Richard Purdie
parent a87811f255
commit 5a5ab7cdec
2 changed files with 10 additions and 7 deletions

View File

@ -260,13 +260,6 @@ class TestImage(OESelftestTestCase):
if distro and (distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'ubuntu-16.04', 'ubuntu-18.04'] or distro.startswith('almalinux')):
self.skipTest('virgl headless cannot be tested with %s' %(distro))
render_hint = """If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer."""
try:
content = os.listdir("/dev/dri")
if len([i for i in content if i.startswith('render')]) == 0:
self.fail("No render nodes found in /dev/dri: %s. %s" %(content, render_hint))
except FileNotFoundError:
self.fail("/dev/dri directory does not exist; no render nodes available on this machine. %s" %(render_hint))
qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
features = 'IMAGE_CLASSES += "testimage"\n'
if 'opengl' not in qemu_distrofeatures:

View File

@ -1366,6 +1366,15 @@ class BaseConfig(object):
raise RunQemuError("Failed to boot, QB_SYSTEM_NAME is NULL!")
self.qemu_system = qemu_system
def check_render_nodes(self):
render_hint = """If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer."""
try:
content = os.listdir("/dev/dri")
if len([i for i in content if i.startswith('render')]) == 0:
raise RunQemuError("No render nodes found in /dev/dri: %s. %s" %(content, render_hint))
except FileNotFoundError:
raise RunQemuError("/dev/dri directory does not exist; no render nodes available on this machine. %s" %(render_hint))
def setup_vga(self):
if self.nographic == True:
if self.sdl == True:
@ -1403,6 +1412,7 @@ class BaseConfig(object):
self.qemu_opt += ' -display '
if self.egl_headless == True:
self.check_render_nodes()
self.set_dri_path()
self.qemu_opt += 'egl-headless,'
else: