mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
runqemu: QB_FSINFO to support fstype wic images
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. The new parameter QB_FSINFO allows to pass image type specific flags to runqemu. QB_FSINFO is a space separated list of parameters. Parameters are structured according to the following pattern: image-type:flag. For now two parameters are supported: - wic:no-kernel-in-fs The wic image is treated as rootfs only image. A -kernel option is passed to qemu. - wic:kernel-in-fs The wic image is treated as VM image including a bootloader and a kernel. This is still the default behavior. Example: QB_DEFAULT_FSTYPE = "wic" QB_FSINFO = "wic:no-kernel-in-fs" QB_KERNEL_ROOT = "/dev/vda1" QB_SYSTEM_NAME = "qemu-system-aarch64" QB_MACHINE = "-machine virt" ... [YOCTO #13336] (From OE-Core rev: 2aa79a67affd22dfa37e4c2945c6ab0c86321f98) Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
79ef0eab35
commit
0e4c79a7c4
|
@ -185,10 +185,11 @@ class BaseConfig(object):
|
|||
self.lock_descriptor = None
|
||||
self.bitbake_e = ''
|
||||
self.snapshot = False
|
||||
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.fsinfo = {}
|
||||
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':
|
||||
|
@ -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'
|
||||
|
@ -536,6 +537,40 @@ class BaseConfig(object):
|
|||
else:
|
||||
raise RunQemuError("FSTYPE is NULL!")
|
||||
|
||||
# parse QB_FSINFO into dict, e.g. { 'wic': ['no-kernel-in-fs', 'a-flag'], 'ext4': ['another-flag']}
|
||||
wic_fs = False
|
||||
qb_fsinfo = self.get('QB_FSINFO')
|
||||
if qb_fsinfo:
|
||||
qb_fsinfo = qb_fsinfo.split()
|
||||
for fsinfo in qb_fsinfo:
|
||||
try:
|
||||
fstype, fsflag = fsinfo.split(':')
|
||||
|
||||
if fstype == 'wic':
|
||||
if fsflag == 'no-kernel-in-fs':
|
||||
wic_fs = True
|
||||
elif fsflag == 'kernel-in-fs':
|
||||
wic_fs = False
|
||||
else:
|
||||
logger.warn('Unknown flag "%s:%s" in QB_FSINFO', fstype, fsflag)
|
||||
continue
|
||||
else:
|
||||
logger.warn('QB_FSINFO is not supported for image type "%s"', fstype)
|
||||
continue
|
||||
|
||||
if fstype in self.fsinfo:
|
||||
self.fsinfo[fstype].append(fsflag)
|
||||
else:
|
||||
self.fsinfo[fstype] = [fsflag]
|
||||
except Exception:
|
||||
logger.error('Invalid parameter "%s" in QB_FSINFO', fsinfo)
|
||||
|
||||
# treat wic images as vmimages (with kernel) or as fsimages (rootfs only)
|
||||
if wic_fs:
|
||||
self.fstypes = self.fstypes + self.wictypes
|
||||
else:
|
||||
self.vmtypes = self.vmtypes + self.wictypes
|
||||
|
||||
def check_rootfs(self):
|
||||
"""Check and set rootfs"""
|
||||
|
||||
|
@ -832,7 +867,11 @@ class BaseConfig(object):
|
|||
if self.dtb:
|
||||
print('DTB: [%s]' % self.dtb)
|
||||
print('MACHINE: [%s]' % self.get('MACHINE'))
|
||||
print('FSTYPE: [%s]' % self.fstype)
|
||||
try:
|
||||
fstype_flags = ' (' + ', '.join(self.fsinfo[self.fstype]) + ')'
|
||||
except KeyError:
|
||||
fstype_flags = ''
|
||||
print('FSTYPE: [%s%s]' % (self.fstype, fstype_flags))
|
||||
if self.fstype == 'nfs':
|
||||
print('NFS_DIR: [%s]' % self.rootfs)
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue
Block a user