diff options
author | Martin Jansa <Martin.Jansa@gmail.com> | 2023-03-31 01:27:24 +0200 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2023-04-14 06:30:30 -1000 |
commit | bc0bc0504e8fa36b7f956e9dbb51fb72789ceb0c (patch) | |
tree | 6fa6ee074a94cba4e563e15abe43aa5e70e64aae /scripts | |
parent | d4e7033be5943648991248dd3115ea1a015576d2 (diff) | |
download | poky-bc0bc0504e8fa36b7f956e9dbb51fb72789ceb0c.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: 82b7a8d5e81d766d0a5c2d0fef0f4c13a8f80c31)
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 716eb55bb963db7b02d985849cb025898aabc855)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/runqemu | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/scripts/runqemu b/scripts/runqemu index efc135e535..9a3c9d2ce4 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
@@ -381,13 +381,19 @@ class BaseConfig(object): | |||
381 | fst = m.group(1) | 381 | fst = m.group(1) |
382 | if fst: | 382 | if fst: |
383 | self.check_arg_fstype(fst) | 383 | self.check_arg_fstype(fst) |
384 | qb = re.sub('\.' + fst + "$", '', self.rootfs) | 384 | qb = re.sub('\.' + fst + "$", '.qemuboot.conf', self.rootfs) |
385 | qb = '%s%s' % (re.sub('\.rootfs$', '', qb), '.qemuboot.conf') | ||
386 | if os.path.exists(qb): | 385 | if os.path.exists(qb): |
387 | self.qemuboot = qb | 386 | self.qemuboot = qb |
388 | self.qbconfload = True | 387 | self.qbconfload = True |
389 | else: | 388 | else: |
390 | logger.warning("%s doesn't exist" % qb) | 389 | logger.warning("%s doesn't exist, will try to remove '.rootfs' from filename" % qb) |
390 | # They to remove .rootfs (IMAGE_NAME_SUFFIX) as well | ||
391 | qb = re.sub('\.rootfs.qemuboot.conf$', '.qemuboot.conf', qb) | ||
392 | if os.path.exists(qb): | ||
393 | self.qemuboot = qb | ||
394 | self.qbconfload = True | ||
395 | else: | ||
396 | logger.warning("%s doesn't exist" % qb) | ||
391 | else: | 397 | else: |
392 | raise RunQemuError("Can't find FSTYPE from: %s" % p) | 398 | raise RunQemuError("Can't find FSTYPE from: %s" % p) |
393 | 399 | ||
@@ -421,6 +427,7 @@ class BaseConfig(object): | |||
421 | # are there other scenarios in which we need to support being | 427 | # are there other scenarios in which we need to support being |
422 | # invoked by bitbake? | 428 | # invoked by bitbake? |
423 | deploy = self.get('DEPLOY_DIR_IMAGE') | 429 | deploy = self.get('DEPLOY_DIR_IMAGE') |
430 | image_link_name = self.get('IMAGE_LINK_NAME') | ||
424 | bbchild = deploy and self.get('OE_TMPDIR') | 431 | bbchild = deploy and self.get('OE_TMPDIR') |
425 | if bbchild: | 432 | if bbchild: |
426 | self.set_machine_deploy_dir(arg, deploy) | 433 | self.set_machine_deploy_dir(arg, deploy) |
@@ -445,6 +452,12 @@ class BaseConfig(object): | |||
445 | else: | 452 | else: |
446 | logger.error("%s not a directory valid DEPLOY_DIR_IMAGE" % deploy_dir_image) | 453 | logger.error("%s not a directory valid DEPLOY_DIR_IMAGE" % deploy_dir_image) |
447 | self.set("MACHINE", arg) | 454 | self.set("MACHINE", arg) |
455 | if not image_link_name: | ||
456 | s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M) | ||
457 | if s: | ||
458 | image_link_name = s.group(1) | ||
459 | self.set("IMAGE_LINK_NAME", image_link_name) | ||
460 | logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name) | ||
448 | 461 | ||
449 | def set_dri_path(self): | 462 | def set_dri_path(self): |
450 | # As runqemu can be run within bitbake (when using testimage, for example), | 463 | # As runqemu can be run within bitbake (when using testimage, for example), |
@@ -557,11 +570,18 @@ class BaseConfig(object): | |||
557 | self.check_arg_machine(unknown_arg) | 570 | self.check_arg_machine(unknown_arg) |
558 | 571 | ||
559 | if not (self.get('DEPLOY_DIR_IMAGE') or self.qbconfload): | 572 | if not (self.get('DEPLOY_DIR_IMAGE') or self.qbconfload): |
560 | self.load_bitbake_env() | 573 | self.load_bitbake_env(target=self.rootfs) |
561 | s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) | 574 | s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) |
562 | if s: | 575 | if s: |
563 | self.set("DEPLOY_DIR_IMAGE", s.group(1)) | 576 | self.set("DEPLOY_DIR_IMAGE", s.group(1)) |
564 | 577 | ||
578 | if not self.get('IMAGE_LINK_NAME') and self.rootfs: | ||
579 | s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M) | ||
580 | if s: | ||
581 | image_link_name = s.group(1) | ||
582 | self.set("IMAGE_LINK_NAME", image_link_name) | ||
583 | logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name) | ||
584 | |||
565 | def check_kvm(self): | 585 | def check_kvm(self): |
566 | """Check kvm and kvm-host""" | 586 | """Check kvm and kvm-host""" |
567 | if not (self.kvm_enabled or self.vhost_enabled): | 587 | if not (self.kvm_enabled or self.vhost_enabled): |
@@ -667,8 +687,8 @@ class BaseConfig(object): | |||
667 | 687 | ||
668 | if self.rootfs and not os.path.exists(self.rootfs): | 688 | if self.rootfs and not os.path.exists(self.rootfs): |
669 | # Lazy rootfs | 689 | # Lazy rootfs |
670 | self.rootfs = "%s/%s-%s.%s" % (self.get('DEPLOY_DIR_IMAGE'), | 690 | self.rootfs = "%s/%s.%s" % (self.get('DEPLOY_DIR_IMAGE'), |
671 | self.rootfs, self.get('MACHINE'), | 691 | self.get('IMAGE_LINK_NAME'), |
672 | self.fstype) | 692 | self.fstype) |
673 | elif not self.rootfs: | 693 | elif not self.rootfs: |
674 | cmd_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype) | 694 | cmd_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype) |
@@ -872,8 +892,10 @@ class BaseConfig(object): | |||
872 | machine = self.get('MACHINE') | 892 | machine = self.get('MACHINE') |
873 | if not machine: | 893 | if not machine: |
874 | machine = os.path.basename(deploy_dir_image) | 894 | machine = os.path.basename(deploy_dir_image) |
875 | self.qemuboot = "%s/%s-%s.qemuboot.conf" % (deploy_dir_image, | 895 | if not self.get('IMAGE_LINK_NAME'): |
876 | self.rootfs, machine) | 896 | raise RunQemuError("IMAGE_LINK_NAME wasn't set to find corresponding .qemuboot.conf file") |
897 | self.qemuboot = "%s/%s.qemuboot.conf" % (deploy_dir_image, | ||
898 | self.get('IMAGE_LINK_NAME')) | ||
877 | else: | 899 | else: |
878 | cmd = 'ls -t %s/*.qemuboot.conf' % deploy_dir_image | 900 | cmd = 'ls -t %s/*.qemuboot.conf' % deploy_dir_image |
879 | logger.debug('Running %s...' % cmd) | 901 | logger.debug('Running %s...' % cmd) |
@@ -1569,7 +1591,7 @@ class BaseConfig(object): | |||
1569 | 1591 | ||
1570 | self.cleaned = True | 1592 | self.cleaned = True |
1571 | 1593 | ||
1572 | def run_bitbake_env(self, mach=None): | 1594 | def run_bitbake_env(self, mach=None, target=''): |
1573 | bitbake = shutil.which('bitbake') | 1595 | bitbake = shutil.which('bitbake') |
1574 | if not bitbake: | 1596 | if not bitbake: |
1575 | return | 1597 | return |
@@ -1582,22 +1604,33 @@ class BaseConfig(object): | |||
1582 | multiconfig = "mc:%s" % multiconfig | 1604 | multiconfig = "mc:%s" % multiconfig |
1583 | 1605 | ||
1584 | if mach: | 1606 | if mach: |
1585 | cmd = 'MACHINE=%s bitbake -e %s' % (mach, multiconfig) | 1607 | cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target) |
1586 | else: | 1608 | else: |
1587 | cmd = 'bitbake -e %s' % multiconfig | 1609 | cmd = 'bitbake -e %s %s' % (multiconfig, target) |
1588 | 1610 | ||
1589 | logger.info('Running %s...' % cmd) | 1611 | logger.info('Running %s...' % cmd) |
1590 | return subprocess.check_output(cmd, shell=True).decode('utf-8') | 1612 | try: |
1613 | return subprocess.check_output(cmd, shell=True).decode('utf-8') | ||
1614 | except subprocess.CalledProcessError as err: | ||
1615 | 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'))) | ||
1616 | # need something with IMAGE_NAME_SUFFIX/IMAGE_LINK_NAME defined (kernel also inherits image-artifact-names.bbclass) | ||
1617 | target = 'virtual/kernel' | ||
1618 | if mach: | ||
1619 | cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target) | ||
1620 | else: | ||
1621 | cmd = 'bitbake -e %s %s' % (multiconfig, target) | ||
1622 | try: | ||
1623 | return subprocess.check_output(cmd, shell=True).decode('utf-8') | ||
1624 | except subprocess.CalledProcessError as err: | ||
1625 | logger.warning("Couldn't run '%s' to gather environment information, giving up with 'bitbake -e':\n%s" % (cmd, err.output.decode('utf-8'))) | ||
1626 | return '' | ||
1591 | 1627 | ||
1592 | def load_bitbake_env(self, mach=None): | 1628 | |
1629 | def load_bitbake_env(self, mach=None, target=None): | ||
1593 | if self.bitbake_e: | 1630 | if self.bitbake_e: |
1594 | return | 1631 | return |
1595 | 1632 | ||
1596 | try: | 1633 | self.bitbake_e = self.run_bitbake_env(mach=mach, target=target) |
1597 | self.bitbake_e = self.run_bitbake_env(mach=mach) | ||
1598 | except subprocess.CalledProcessError as err: | ||
1599 | self.bitbake_e = '' | ||
1600 | logger.warning("Couldn't run 'bitbake -e' to gather environment information:\n%s" % err.output.decode('utf-8')) | ||
1601 | 1634 | ||
1602 | def validate_combos(self): | 1635 | def validate_combos(self): |
1603 | if (self.fstype in self.vmtypes) and self.kernel: | 1636 | if (self.fstype in self.vmtypes) and self.kernel: |