From: Joshua Lock <joshua.g.lock@linux.intel.com>
To: Robert Yang <liezhi.yang@windriver.com>,
openembedded-core@lists.openembedded.org
Subject: Re: [PATCH V2 8/8] runqemu: improve finding of rootfs, kernel and dtb
Date: Mon, 19 Sep 2016 10:12:30 +0100 [thread overview]
Message-ID: <1474276350.2929.8.camel@linux.intel.com> (raw)
In-Reply-To: <6acbaf5e46bc050d3456476aad273270b8e26dc3.1474183984.git.liezhi.yang@windriver.com>
On Sun, 2016-09-18 at 00:39 -0700, Robert Yang wrote:
> * Search rootfs in the following order:
> - IMAGE_NAME*.FSTYPE
> - IMAGE_LINK_NAME*.FSTYPE
>
> * Search kernel in the following order:
> - QB_DEFAULT_KERNEL
> - KERNEL_IMAGETYPE
> - KERNEL_IMAGETYPE*
>
> * Search dtb in the following order:
> - QB_DTB
> - QB_DTB*
> - *.dtb
>
> * Fix DTB, it should only work with "-kernel" option.
>
> [YOCTO #10265]
>
> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> ---
> scripts/runqemu | 68 ++++++++++++++++++++++++++++++++++-------------
> ----------
> 1 file changed, 41 insertions(+), 27 deletions(-)
>
> diff --git a/scripts/runqemu b/scripts/runqemu
> index 60e2093..1c4e69b 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -157,6 +157,7 @@ class BaseConfig(object):
> self.kernel = ''
> self.kernel_cmdline = ''
> self.kernel_cmdline_script = ''
> + self.dtb = ''
> self.fstype = ''
> self.kvm_enabled = False
> self.vhost_enabled = False
> @@ -440,23 +441,23 @@ class BaseConfig(object):
> if self.fstype == 'nfs':
> return
>
> + cmd_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'),
> self.get('IMAGE_NAME'), self.fstype)
> + cmd_link = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'),
> self.get('IMAGE_LINK_NAME'), self.fstype)
> + cmds = (cmd_name, cmd_link)
> if self.rootfs and not os.path.exists(self.rootfs):
> # Lazy rootfs
> self.rootfs = "%s/%s-%s.%s" %
> (self.get('DEPLOY_DIR_IMAGE'),
> self.rootfs, self.get('MACHINE'),
> self.fstype)
> elif not self.rootfs:
> - cmd = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'),
> self.get('IMAGE_NAME'), self.fstype)
> - all_files = glob.glob(cmd)
> - if all_files:
> - self.rootfs = all_files[0]
> - else:
> - cmd = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'),
> self.get('IMAGE_LINK_NAME'), self.fstype)
> + for cmd in cmds:
> all_files = glob.glob(cmd)
> if all_files:
> self.rootfs = all_files[0]
> - else:
> - raise Exception("Failed to find rootfs: %s" %
> cmd)
> + break
> +
> + if not self.rootfs:
> + raise Exception("Failed to find rootfs: %s or %s" %
> cmds)
>
> if not os.path.exists(self.rootfs):
> raise Exception("Can't find rootfs: %s" % self.rootfs)
> @@ -466,28 +467,37 @@ class BaseConfig(object):
> # The vm image doesn't need a kernel
> if self.fstype in self.vmtypes:
> return
> - kernel = self.kernel
> +
> deploy_dir_image = self.get('DEPLOY_DIR_IMAGE')
> - if not kernel:
> - kernel = "%s/%s" % (deploy_dir_image,
> self.get('QB_DEFAULT_KERNEL'))
> + if not self.kernel:
> + kernel_match_name = "%s/%s" % (deploy_dir_image,
> self.get('QB_DEFAULT_KERNEL'))
> + kernel_match_link = "%s/%s" % (deploy_dir_image,
> self.get('KERNEL_IMAGETYPE'))
> + kernel_startswith = "%s/%s*" % (deploy_dir_image,
> self.get('KERNEL_IMAGETYPE'))
There are qemuboot.conf files in the wild which won't contain
KERNEL_IMAGETYPE, at which point we're just looking for matches to
DEPLOY_DIR_IMAGE or DEPLOY_DIR_IMAGE/*
I think we need to add some extra handling so that we don't end up
setting kernel to either DEPLOY_DIR_IMAGE or its first child?
Joshua
> + cmds = (kernel_match_name, kernel_match_link,
> kernel_startswith)
> + for cmd in cmds:
> + all_files = glob.glob(cmd)
> + if all_files:
> + self.kernel = all_files[0]
> + break
> + if not self.kernel:
> + raise Exception('KERNEL not found: %s, %s or %s' %
> cmds)
>
> - if os.path.exists(kernel):
> - self.kernel = kernel
> - else:
> - kernel = "%s/%s" % (deploy_dir_image,
> self.get('KERNEL_IMAGETYPE'))
> - if kernel != deploy_dir_image and
> os.path.exists(kernel):
> - self.kernel = kernel
> - else:
> - raise Exception("KERNEL %s not found" % kernel)
> + if not os.path.exists(self.kernel):
> + raise Exception("KERNEL %s not found" % self.kernel)
>
> dtb = self.get('QB_DTB')
> if dtb:
> - dtb = "%s/%s" % (self.get('DEPLOY_DIR_IMAGE'), dtb)
> - if os.path.exists(dtb):
> - self.set('QB_DTB', '-dtb %s' % dtb)
> - else:
> - raise Exception("DTB %s not found" % dtb)
> -
> + cmd_match = "%s/%s" % (deploy_dir_image, dtb)
> + cmd_startswith = "%s/%s*" % (deploy_dir_image, dtb)
> + cmd_wild = "%s/*.dtb" % deploy_dir_image
> + cmds = (cmd_match, cmd_startswith, cmd_wild)
> + for cmd in cmds:
> + all_files = glob.glob(cmd)
> + if all_files:
> + self.dtb = all_files[0]
> + break
> + if not os.path.exists(self.dtb):
> + raise Exception('DTB not found: %s, %s or %s' %
> cmds)
>
> def check_biosdir(self):
> """Check custombiosdir"""
> @@ -643,6 +653,8 @@ class BaseConfig(object):
> logger.info('Continuing with the following parameters:\n')
> if not self.fstype in self.vmtypes:
> print('KERNEL: [%s]' % self.kernel)
> + if self.dtb:
> + print('DTB: [%s]' % self.dtb)
> print('MACHINE: [%s]' % self.get('MACHINE'))
> print('FSTYPE: [%s]' % self.fstype)
> if self.fstype == 'nfs':
> @@ -687,7 +699,7 @@ class BaseConfig(object):
> elif os.path.exists(src2):
> src = src2
> if not src:
> - raise Exception("No NFS_DIR is set but can't
> find %s or %s to extract" % (src1, src2))
> + raise Exception("No NFS_DIR is set, and can't
> find %s or %s to extract" % (src1, src2))
> logger.info('NFS_DIR not found, extracting %s to %s'
> % (src, dest))
> cmd = 'runqemu-extract-sdk %s %s' % (src, dest)
> logger.info('Running %s...' % cmd)
> @@ -845,7 +857,7 @@ class BaseConfig(object):
>
> check_libgl(qemu_bin)
>
> - self.qemu_opt = "%s %s %s %s %s %s" % (qemu_bin,
> self.get('NETWORK_CMD'), self.qemu_opt_script,
> self.get('ROOTFS_OPTIONS'), self.get('QB_DTB'),
> self.get('QB_OPT_APPEND'))
> + self.qemu_opt = "%s %s %s %s %s" % (qemu_bin,
> self.get('NETWORK_CMD'), self.qemu_opt_script,
> self.get('ROOTFS_OPTIONS'), self.get('QB_OPT_APPEND'))
>
> # Enable virtio RNG else we can run out of entropy in guests
> self.qemu_opt += " -device virtio-rng-pci"
> @@ -877,6 +889,8 @@ class BaseConfig(object):
> def start_qemu(self):
> if self.kernel:
> kernel_opts = "-kernel %s -append '%s %s %s'" %
> (self.kernel, self.kernel_cmdline, self.kernel_cmdline_script,
> self.get('QB_KERNEL_CMDLINE_APPEND'))
> + if self.dtb:
> + kernel_opts += " -dtb %s" % self.dtb
> else:
> kernel_opts = ""
> cmd = "%s %s" % (self.qemu_opt, kernel_opts)
> --
> 2.9.0
>
next prev parent reply other threads:[~2016-09-19 9:12 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-18 7:39 [PATCH V2 0/8] runqemu fixes Robert Yang
2016-09-18 7:39 ` [PATCH V2 1/8] runqemu: add guidance to resolve issues with missing files Robert Yang
2016-09-18 7:39 ` [PATCH V2 2/8] qemuboot: write the full kernel filename, not the link name Robert Yang
2016-09-18 7:39 ` [PATCH V2 3/8] runqemu: clarify an INFO message Robert Yang
2016-09-18 7:39 ` [PATCH V2 4/8] qemuboot: also write the kernel link name to the conf file Robert Yang
2016-09-18 7:39 ` [PATCH V2 5/8] runqemu: try symlinks when kernel or rootfs can't be found Robert Yang
2016-09-18 7:39 ` [PATCH V2 6/8] runqemu: work even if a *.qemuboot.conf isn't found Robert Yang
2016-09-18 7:39 ` [PATCH V2 7/8] runqemu: use OECORE_NATIVE_SYSROOT from sdk Robert Yang
2016-09-18 7:39 ` [PATCH V2 8/8] runqemu: improve finding of rootfs, kernel and dtb Robert Yang
2016-09-19 9:12 ` Joshua Lock [this message]
2016-09-19 10:53 ` Robert Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1474276350.2929.8.camel@linux.intel.com \
--to=joshua.g.lock@linux.intel.com \
--cc=liezhi.yang@windriver.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.