summaryrefslogtreecommitdiffstats
path: root/scripts/runqemu
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2023-03-31 01:27:24 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-04-04 13:11:49 +0100
commit3f0acc2a6133bf8cd3cb2c5046cf6f7e8943283c (patch)
tree547cea7dee6a7dd341e2bed27f6212e23b74cd52 /scripts/runqemu
parent658728a67871f4ee10369308f166577053478300 (diff)
downloadpoky-3f0acc2a6133bf8cd3cb2c5046cf6f7e8943283c.tar.gz
runqemu: respect IMAGE_LINK_NAME
* when searching for qemuboot.conf * don't assume that IMAGE_LINK_NAME is always <rootfs>-<machine> (with <rootfs>-<machine>.qemuboot.conf) * runqemu: use IMAGE_LINK_NAME set by testimage.bbclass or query with bitbake -e * testimage.bbclass was setting DEPLOY_DIR which I don't see used anywhere else, so I assume it was supposed to be DEPLOY_DIR_IMAGE as mentioned in corresponding runqemu code, do the same with IMAGE_LINK_NAME variable * add virtual/kernel as bitbake -e target in run_bitbake_env to make sure IMAGE_LINK_NAME is defined (kernel-artifact-names.bbclass inherits image-artifact-names.bbclass as well) * improve .qemuboot.conf search 1st search for file matching the rootfs and only when not found try again with .rootfs suffix removed [YOCTO #12937] (From OE-Core rev: 716eb55bb963db7b02d985849cb025898aabc855) Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/runqemu')
-rwxr-xr-xscripts/runqemu69
1 files changed, 51 insertions, 18 deletions
diff --git a/scripts/runqemu b/scripts/runqemu
index 09b0ad5ed5..4c06cefbff 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -384,13 +384,19 @@ class BaseConfig(object):
384 fst = m.group(1) 384 fst = m.group(1)
385 if fst: 385 if fst:
386 self.check_arg_fstype(fst) 386 self.check_arg_fstype(fst)
387 qb = re.sub('\.' + fst + "$", '', self.rootfs) 387 qb = re.sub('\.' + fst + "$", '.qemuboot.conf', self.rootfs)
388 qb = '%s%s' % (re.sub('\.rootfs$', '', qb), '.qemuboot.conf')
389 if os.path.exists(qb): 388 if os.path.exists(qb):
390 self.qemuboot = qb 389 self.qemuboot = qb
391 self.qbconfload = True 390 self.qbconfload = True
392 else: 391 else:
393 logger.warning("%s doesn't exist" % qb) 392 logger.warning("%s doesn't exist, will try to remove '.rootfs' from filename" % qb)
393 # They to remove .rootfs (IMAGE_NAME_SUFFIX) as well
394 qb = re.sub('\.rootfs.qemuboot.conf$', '.qemuboot.conf', qb)
395 if os.path.exists(qb):
396 self.qemuboot = qb
397 self.qbconfload = True
398 else:
399 logger.warning("%s doesn't exist" % qb)
394 else: 400 else:
395 raise RunQemuError("Can't find FSTYPE from: %s" % p) 401 raise RunQemuError("Can't find FSTYPE from: %s" % p)
396 402
@@ -424,6 +430,7 @@ class BaseConfig(object):
424 # are there other scenarios in which we need to support being 430 # are there other scenarios in which we need to support being
425 # invoked by bitbake? 431 # invoked by bitbake?
426 deploy = self.get('DEPLOY_DIR_IMAGE') 432 deploy = self.get('DEPLOY_DIR_IMAGE')
433 image_link_name = self.get('IMAGE_LINK_NAME')
427 bbchild = deploy and self.get('OE_TMPDIR') 434 bbchild = deploy and self.get('OE_TMPDIR')
428 if bbchild: 435 if bbchild:
429 self.set_machine_deploy_dir(arg, deploy) 436 self.set_machine_deploy_dir(arg, deploy)
@@ -448,6 +455,12 @@ class BaseConfig(object):
448 else: 455 else:
449 logger.error("%s not a directory valid DEPLOY_DIR_IMAGE" % deploy_dir_image) 456 logger.error("%s not a directory valid DEPLOY_DIR_IMAGE" % deploy_dir_image)
450 self.set("MACHINE", arg) 457 self.set("MACHINE", arg)
458 if not image_link_name:
459 s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M)
460 if s:
461 image_link_name = s.group(1)
462 self.set("IMAGE_LINK_NAME", image_link_name)
463 logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name)
451 464
452 def set_dri_path(self): 465 def set_dri_path(self):
453 drivers_path = os.path.join(self.bindir_native, '../lib/dri') 466 drivers_path = os.path.join(self.bindir_native, '../lib/dri')
@@ -550,11 +563,18 @@ to your build configuration.
550 self.check_arg_machine(unknown_arg) 563 self.check_arg_machine(unknown_arg)
551 564
552 if not (self.get('DEPLOY_DIR_IMAGE') or self.qbconfload): 565 if not (self.get('DEPLOY_DIR_IMAGE') or self.qbconfload):
553 self.load_bitbake_env() 566 self.load_bitbake_env(target=self.rootfs)
554 s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) 567 s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M)
555 if s: 568 if s:
556 self.set("DEPLOY_DIR_IMAGE", s.group(1)) 569 self.set("DEPLOY_DIR_IMAGE", s.group(1))
557 570
571 if not self.get('IMAGE_LINK_NAME') and self.rootfs:
572 s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M)
573 if s:
574 image_link_name = s.group(1)
575 self.set("IMAGE_LINK_NAME", image_link_name)
576 logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name)
577
558 def check_kvm(self): 578 def check_kvm(self):
559 """Check kvm and kvm-host""" 579 """Check kvm and kvm-host"""
560 if not (self.kvm_enabled or self.vhost_enabled): 580 if not (self.kvm_enabled or self.vhost_enabled):
@@ -660,8 +680,8 @@ to your build configuration.
660 680
661 if self.rootfs and not os.path.exists(self.rootfs): 681 if self.rootfs and not os.path.exists(self.rootfs):
662 # Lazy rootfs 682 # Lazy rootfs
663 self.rootfs = "%s/%s-%s.%s" % (self.get('DEPLOY_DIR_IMAGE'), 683 self.rootfs = "%s/%s.%s" % (self.get('DEPLOY_DIR_IMAGE'),
664 self.rootfs, self.get('MACHINE'), 684 self.get('IMAGE_LINK_NAME'),
665 self.fstype) 685 self.fstype)
666 elif not self.rootfs: 686 elif not self.rootfs:
667 glob_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype) 687 glob_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype)
@@ -865,8 +885,10 @@ to your build configuration.
865 machine = self.get('MACHINE') 885 machine = self.get('MACHINE')
866 if not machine: 886 if not machine:
867 machine = os.path.basename(deploy_dir_image) 887 machine = os.path.basename(deploy_dir_image)
868 self.qemuboot = "%s/%s-%s.qemuboot.conf" % (deploy_dir_image, 888 if not self.get('IMAGE_LINK_NAME'):
869 self.rootfs, machine) 889 raise RunQemuError("IMAGE_LINK_NAME wasn't set to find corresponding .qemuboot.conf file")
890 self.qemuboot = "%s/%s.qemuboot.conf" % (deploy_dir_image,
891 self.get('IMAGE_LINK_NAME'))
870 else: 892 else:
871 cmd = 'ls -t %s/*.qemuboot.conf' % deploy_dir_image 893 cmd = 'ls -t %s/*.qemuboot.conf' % deploy_dir_image
872 logger.debug('Running %s...' % cmd) 894 logger.debug('Running %s...' % cmd)
@@ -1600,7 +1622,7 @@ to your build configuration.
1600 1622
1601 self.cleaned = True 1623 self.cleaned = True
1602 1624
1603 def run_bitbake_env(self, mach=None): 1625 def run_bitbake_env(self, mach=None, target=''):
1604 bitbake = shutil.which('bitbake') 1626 bitbake = shutil.which('bitbake')
1605 if not bitbake: 1627 if not bitbake:
1606 return 1628 return
@@ -1613,22 +1635,33 @@ to your build configuration.
1613 multiconfig = "mc:%s" % multiconfig 1635 multiconfig = "mc:%s" % multiconfig
1614 1636
1615 if mach: 1637 if mach:
1616 cmd = 'MACHINE=%s bitbake -e %s' % (mach, multiconfig) 1638 cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target)
1617 else: 1639 else:
1618 cmd = 'bitbake -e %s' % multiconfig 1640 cmd = 'bitbake -e %s %s' % (multiconfig, target)
1619 1641
1620 logger.info('Running %s...' % cmd) 1642 logger.info('Running %s...' % cmd)
1621 return subprocess.check_output(cmd, shell=True).decode('utf-8') 1643 try:
1644 return subprocess.check_output(cmd, shell=True).decode('utf-8')
1645 except subprocess.CalledProcessError as err:
1646 logger.warning("Couldn't run '%s' to gather environment information, maybe the target wasn't an image name, will retry with virtual/kernel as a target:\n%s" % (cmd, err.output.decode('utf-8')))
1647 # need something with IMAGE_NAME_SUFFIX/IMAGE_LINK_NAME defined (kernel also inherits image-artifact-names.bbclass)
1648 target = 'virtual/kernel'
1649 if mach:
1650 cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target)
1651 else:
1652 cmd = 'bitbake -e %s %s' % (multiconfig, target)
1653 try:
1654 return subprocess.check_output(cmd, shell=True).decode('utf-8')
1655 except subprocess.CalledProcessError as err:
1656 logger.warning("Couldn't run '%s' to gather environment information, giving up with 'bitbake -e':\n%s" % (cmd, err.output.decode('utf-8')))
1657 return ''
1622 1658
1623 def load_bitbake_env(self, mach=None): 1659
1660 def load_bitbake_env(self, mach=None, target=None):
1624 if self.bitbake_e: 1661 if self.bitbake_e:
1625 return 1662 return
1626 1663
1627 try: 1664 self.bitbake_e = self.run_bitbake_env(mach=mach, target=target)
1628 self.bitbake_e = self.run_bitbake_env(mach=mach)
1629 except subprocess.CalledProcessError as err:
1630 self.bitbake_e = ''
1631 logger.warning("Couldn't run 'bitbake -e' to gather environment information:\n%s" % err.output.decode('utf-8'))
1632 1665
1633 def validate_combos(self): 1666 def validate_combos(self):
1634 if (self.fstype in self.vmtypes) and self.kernel: 1667 if (self.fstype in self.vmtypes) and self.kernel: