[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