[OE-core] [meta-oe][PATCH v2 3/4] runqemu: support non-bootable wic images

Adrian Freihofer adrian.freihofer at siemens.com
Fri Jun 7 21:47:06 UTC 2019


wic images are handled as vmtype images. Starting qemu with "-kernel"
parameter and an image of type wic is not supported. Especially for
"-machine virt" the combination of wic with -kernel parameter would
be beneficial.

This patch changes the runqemu script to support this. If QB_MACHINE
contains "-machine virt" and the image is of type wic a -kernel
parameter is expected. Otherwise wic images are handled as before.

Example:
QB_DEFAULT_FSTYPE = "wic"
QB_KERNEL_ROOT = "/dev/vda1"
QB_SYSTEM_NAME = "qemu-system-aarch64"
QB_MACHINE = "-machine virt"
...

[YOCTO #13336]

Signed-off-by: Adrian Freihofer <adrian.freihofer at siemens.com>
---
 scripts/runqemu | 34 ++++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/scripts/runqemu b/scripts/runqemu
index af90c010da..71894c9ca8 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -185,10 +185,11 @@ class BaseConfig(object):
         self.lock_descriptor = None
         self.bitbake_e = ''
         self.snapshot = False
+        self.wic_fs = None
+        self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi')
         self.fstypes = ('ext2', 'ext3', 'ext4', 'jffs2', 'nfs', 'btrfs',
                         'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz')
-        self.vmtypes = ('hddimg', 'hdddirect', 'wic', 'wic.vmdk',
-                        'wic.qcow2', 'wic.vdi', 'iso')
+        self.vmtypes = ('hddimg', 'hdddirect', 'iso')
         self.network_device = "-device e1000,netdev=net0,mac=@MAC@"
         # Use different mac section for tap and slirp to avoid
         # conflicts, e.g., when one is running with tap, the other is
@@ -253,7 +254,7 @@ class BaseConfig(object):
 
     def check_arg_fstype(self, fst):
         """Check and set FSTYPE"""
-        if fst not in self.fstypes + self.vmtypes:
+        if fst not in self.fstypes + self.vmtypes + self.wictypes:
             logger.warning("Maybe unsupported FSTYPE: %s" % fst)
         if not self.fstype or self.fstype == fst:
             if fst == 'ramfs':
@@ -300,7 +301,7 @@ class BaseConfig(object):
             # Check filename against self.fstypes can hanlde <file>.cpio.gz,
             # otherwise, its type would be "gz", which is incorrect.
             fst = ""
-            for t in self.fstypes:
+            for t in self.fstypes + self.wictypes:
                 if p.endswith(t):
                     fst = t
                     break
@@ -390,7 +391,7 @@ class BaseConfig(object):
 
         unknown_arg = ""
         for arg in sys.argv[1:]:
-            if arg in self.fstypes + self.vmtypes:
+            if arg in self.fstypes + self.vmtypes + self.wictypes:
                 self.check_arg_fstype(arg)
             elif arg == 'nographic':
                 self.qemu_opt_script += ' -nographic'
@@ -695,6 +696,21 @@ class BaseConfig(object):
 
     def check_and_set(self):
         """Check configs sanity and set when needed"""
+
+        # Decide how wic images are handled: as vm or with -kernel parameter
+        if self.wic_fs is None:
+            self.wic_fs = False
+            try:
+                qbm = self.get('QB_MACHINE')
+                if re.search('\s+virt(?![^ ])', qbm):
+                    self.wic_fs = True
+            except AttributeError:
+                pass
+        if self.wic_fs is True:
+            self.fstypes = self.fstypes + self.wictypes
+        else:
+            self.vmtypes = self.vmtypes + self.wictypes
+
         self.validate_paths()
         if not self.slirp_enabled:
             check_tun()
@@ -832,7 +848,13 @@ class BaseConfig(object):
             if self.dtb:
                 print('DTB: [%s]' % self.dtb)
         print('MACHINE: [%s]' % self.get('MACHINE'))
-        print('FSTYPE: [%s]' % self.fstype)
+        wic_mode = ''
+        if self.fstype == 'wic':
+            if self.wic_fs:
+                wic_mode = ' (fs)'
+            else:
+                wic_mode = ' (vm)'
+        print('FSTYPE: [%s%s]' % (self.fstype, wic_mode))
         if self.fstype  == 'nfs':
             print('NFS_DIR: [%s]' % self.rootfs)
         else:
-- 
2.11.0



More information about the Openembedded-core mailing list