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.y...@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 > -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core