[OE-core] [PATCH V2 8/8] runqemu: improve finding of rootfs, kernel and dtb
Robert Yang
liezhi.yang at windriver.com
Mon Sep 19 10:53:49 UTC 2016
On 09/19/2016 05:12 PM, Joshua Lock wrote:
> 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 at 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?
Thanks, updated in the repo:
git://git.openembedded.org/openembedded-core-contrib rbt/rq
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/rq
Joshua Lock (6):
runqemu: add guidance to resolve issues with missing files
qemuboot: write the full kernel filename, not the link name
runqemu: clarify an INFO message
qemuboot: also write the kernel link name to the conf file
runqemu: try symlinks when kernel or rootfs can't be found
runqemu: work even if a *.qemuboot.conf isn't found
Robert Yang (2):
runqemu: use OECORE_NATIVE_SYSROOT from sdk
runqemu: improve finding of rootfs, kernel and dtb
// Robert
>
> 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
>>
>
More information about the Openembedded-core
mailing list