On Mon, 2026-02-23 at 16:49 -0500, Trevor Woerner via lists.openembedded.org wrote: > The previous implementation to add variable sector-size support: > - required the variable WIC_SECTOR_SIZE either be defined in a > configuration file or be defined in a --vars file > - this means that every invocation of "wic ls", "wic cp", or "wic rm" > needed this variable defined (config or --vars) > - required the user to create separate *wks files for every sector size > they wanted to use > - required the user to specify the mkfs-extraopts by hand to specify the > correct sector size: e.g. > bootloader --ptable gpt > part --fstype ext4 --source rootfs --label rofs-a --mkfs-extraopts "-b > 4096" > part --fstype ext4 --source rootfs --use-uuid --mkfs-extraopts "-b 4096" > - specifying --mkfs-extraopts replaces the defaults with the > user-supplied values > - only provided details to support using variable sector-sizes with > ext[234] filesystems > - it would not be possible to generate images with different sector > sizes in the same build since the configuration and *wks files would > need to change and the build re-run for each size > > Update the sector-size handling so that: > - the sector-size will now be provided on the cmdline to the "wic ls", > "wic cp", "wic rm", and "wic create" commands: default = 512 > - this means the configuration and/or --vars file does not need to be > changed in order to perform those operations on images with different > sector sizes > - support is provided implicitly for mkdosfs and ext[234] partitions > - the user no longer needs to know and supply the sector-size magic in > --mkfs-extraopts (thereby clobbering the other defaults) > > If the --sector-size command-line argument is not given, allow the > sector-size to be provided via the WIC_SECTOR_SIZE bitbake variable. > Warn the user whenever the WIC_SECTOR_SIZE bitbake variable is used, > mention it is deprecated, and suggest the user use the cmdline arg > instead. If both are given, warn the user that the cmdline argument > takes precedence. > > AI-Generated: codex/gpt-5.1-codex-max > Signed-off-by: Trevor Woerner <[email protected]> > --- > changes in v5: > - fix a bug in the case where WIC_SECTOR_SIZE does not exist at all and > is not provided neither in the environment nor a config file > > changes in v4: > - allow the sector-size to be set from WIC_SECTOR_SIZE (environment or > vars file) but mark its use deprecated, suggest the user use the > cmdline arg instead; if both are given point out that the cmdline > value takes precedence > > changes in v3: > - none > > changes in v2: > - none
Thanks for the patch! This looks fairly good, just a little tidy up
needed.
> diff --git a/meta/lib/oeqa/selftest/cases/wic.py
> b/meta/lib/oeqa/selftest/cases/wic.py
> index ecaee5a29144..7ad61fa700f7 100644
> --- a/meta/lib/oeqa/selftest/cases/wic.py
> +++ b/meta/lib/oeqa/selftest/cases/wic.py
> @@ -935,33 +935,22 @@ bootloader --ptable gpt""")
> finally:
> os.remove(wks_file)
>
> - def test_wic_sector_size(self):
> - """Test generation image sector size"""
> -
> + def test_wic_sector_size_cli(self):
> + """Test sector size handling via CLI option."""
> +
> oldpath = os.environ['PATH']
> os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
>
> try:
> - # Add WIC_SECTOR_SIZE into config
> - config = 'WIC_SECTOR_SIZE = "4096"\n'\
> - 'WICVARS:append = " WIC_SECTOR_SIZE"\n'
> - self.append_config(config)
> bitbake('core-image-minimal')
>
> - # Check WIC_SECTOR_SIZE apply to bitbake variable
> - wic_sector_size_str = get_bb_var('WIC_SECTOR_SIZE',
> 'core-image-minimal')
> - wic_sector_size = int(wic_sector_size_str)
> - self.assertEqual(4096, wic_sector_size)
> -
> - self.logger.info("Test wic_sector_size: %d \n" % wic_sector_size)
> -
> with NamedTemporaryFile("w", suffix=".wks") as wks:
> wks.writelines(
> ['bootloader --ptable gpt\n',
> - 'part --fstype ext4 --source rootfs --label rofs-a
> --mkfs-extraopts "-b 4096"\n',
> - 'part --fstype ext4 --source rootfs --use-uuid
> --mkfs-extraopts "-b 4096"\n'])
> + 'part --fstype ext4 --source rootfs --label rofs-a\n',
> + 'part --fstype ext4 --source rootfs --use-uuid\n'])
> wks.flush()
> - cmd = "wic create %s -e core-image-minimal -o %s" %
> (wks.name, self.resultdir)
> + cmd = "wic create %s -e core-image-minimal -o %s
> --sector-size 4096" % (wks.name, self.resultdir)
> runCmd(cmd)
> wksname = os.path.splitext(os.path.basename(wks.name))[0]
> images = glob(os.path.join(self.resultdir, "%s-*direct" %
> wksname))
> @@ -969,24 +958,18 @@ bootloader --ptable gpt""")
>
> sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
> # list partitions
> - result = runCmd("wic ls %s -n %s" % (images[0], sysroot))
> + result = runCmd("wic ls %s -n %s --sector-size 4096" %
> (images[0], sysroot))
> self.assertEqual(3, len(result.output.split('\n')))
>
> - # verify partition size with wic
> - res = runCmd("export PARTED_SECTOR_SIZE=%d; parted -m %s unit b
> p" % (wic_sector_size, images[0]),
> + # verify partition size with parted output
> + res = runCmd("export PARTED_SECTOR_SIZE=%d; parted -m %s unit b
> p" % (4096, images[0]),
> stderr=subprocess.PIPE)
>
> - # parse parted output which looks like this:
> - # BYT;\n
> - #
> /var/tmp/wic/build/tmpgjzzefdd-202410281021-sda.direct:78569472B:file:4096:4096:gpt::;\n
> - # 1:139264B:39284735B:39145472B:ext4:rofs-a:;\n
> - # 2:39284736B:78430207B:39145472B:ext4:primary:;\n
> disk_info = res.output.splitlines()[1]
> - # Check sector sizes
> sector_size_logical = int(disk_info.split(":")[3])
> sector_size_physical = int(disk_info.split(":")[4])
> - self.assertEqual(wic_sector_size, sector_size_logical, "Logical
> sector size is not %d." % wic_sector_size)
> - self.assertEqual(wic_sector_size, sector_size_physical,
> "Physical sector size is not %d." % wic_sector_size)
> + self.assertEqual(4096, sector_size_logical, "Logical sector size
> is not 4096.")
> + self.assertEqual(4096, sector_size_physical, "Physical sector
> size is not 4096.")
>
> finally:
> os.environ['PATH'] = oldpath
> diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
> index 8682ca3176c2..949119edd487 100644
> --- a/scripts/lib/wic/engine.py
> +++ b/scripts/lib/wic/engine.py
> @@ -252,7 +252,7 @@ def debugfs_version_check(debugfs_path, min_ver=(1, 46,
> 5)):
>
>
> class Disk:
> - def __init__(self, imagepath, native_sysroot, fstypes=('fat', 'ext')):
> + def __init__(self, imagepath, native_sysroot, fstypes=('fat', 'ext'),
> sector_size=512):
> self.imagepath = imagepath
> self.native_sysroot = native_sysroot
> self.fstypes = fstypes
> @@ -261,16 +261,7 @@ class Disk:
> self._lsector_size = None
> self._psector_size = None
> self._ptable_format = None
> -
> - # define sector size
> - sector_size_str = get_bitbake_var('WIC_SECTOR_SIZE')
> - if sector_size_str is not None:
> - try:
> - self.sector_size = int(sector_size_str)
> - except ValueError:
> - self.sector_size = None
> - else:
> - self.sector_size = None
> + self.sector_size = sector_size
>
> # find parted
> # read paths from $PATH environment variable
> @@ -299,7 +290,7 @@ class Disk:
> if self._partitions is None:
> self._partitions = OrderedDict()
>
> - if self.sector_size is not None:
> + if self.sector_size:
Sector size should not always be set as we have a default, this if
condition isn't needed anymore.
> out = exec_cmd("export PARTED_SECTOR_SIZE=%d; %s -sm %s unit
> B print" % \
> (self.sector_size, self.parted, self.imagepath),
> True)
> else:
> @@ -340,11 +331,15 @@ class Disk:
> raise WicError("Partition %s is not in the image" % pnum)
> part = self.partitions[pnum]
> # check if fstype is supported
> + # NOTE: parted is unable to identify dos-type partitions with a 4k
> sector-size
> + # if the type is empty and a non-default sector size is used,
> assume 'fat'
> + # fdisk identifies them without issue
> + part_fstype = part.fstype if part.fstype or self.sector_size == 512
> else 'fat'
This is difficult to parse. What's the result if part.fstype is None but
self.sector_size is 512?
> for fstype in self.fstypes:
> - if part.fstype.startswith(fstype):
> + if part_fstype.startswith(fstype):
> break
> else:
> - raise WicError("Not supported fstype: {}".format(part.fstype))
> + raise WicError("Not supported fstype: {}".format(part_fstype))
> if pnum not in self._partimages:
> tmpf = tempfile.NamedTemporaryFile(prefix="wic-part")
> dst_fname = tmpf.name
> @@ -615,8 +610,9 @@ class Disk:
> label = part.get("name")
> label_str = "-n {}".format(label) if label else
> ''
>
> - cmd = "{} {} -C {} {}".format(self.mkdosfs,
> label_str, partfname,
> - part['size'])
> + sector_str = "-S {}".format(self.sector_size) if
> self.sector_size else ''
> + cmd = "{} {} {} -C {} {}".format(self.mkdosfs,
> label_str, sector_str, partfname,
> + part['size'])
> exec_cmd(cmd)
> # copy content from the temporary directory to
> the new partition
> cmd = "{} -snompi {} {}/* ::".format(self.mcopy,
> partfname, tmpdir)
> @@ -638,14 +634,19 @@ class Disk:
>
> def wic_ls(args, native_sysroot):
> """List contents of partitioned image or vfat partition."""
> - disk = Disk(args.path.image, native_sysroot)
> + disk = Disk(args.path.image, native_sysroot,
> sector_size=args.sector_size)
> if not args.path.part:
> if disk.partitions:
> print('Num Start End Size Fstype')
> for part in disk.partitions.values():
> + # size values are in bytes from parted; convert to sectors
> if a custom sector size was requested
> + display_size = part.size
> + if args.sector_size and args.sector_size !=
> disk._lsector_size:
> + display_size = part.size // args.sector_size
> print("{:2d} {:12d} {:12d} {:12d} {}".format(\
> - part.pnum, part.start, part.end,
> - part.size, part.fstype))
> + part.pnum, part.start // args.sector_size,
> + part.end // args.sector_size,
> + display_size, part.fstype))
This looks like it could confuse users - is it always clear to the user
whether the output is in bytes or in sectors? Why not leave this always
printing the size in bytes so that there's no confusion?
> else:
> path = args.path.path or '/'
> print(disk.dir(args.path.part, path))
> @@ -656,9 +657,9 @@ def wic_cp(args, native_sysroot):
> partitioned image.
> """
> if isinstance(args.dest, str):
> - disk = Disk(args.src.image, native_sysroot)
> + disk = Disk(args.src.image, native_sysroot,
> sector_size=args.sector_size)
> else:
> - disk = Disk(args.dest.image, native_sysroot)
> + disk = Disk(args.dest.image, native_sysroot,
> sector_size=args.sector_size)
> disk.copy(args.src, args.dest)
>
>
> @@ -667,7 +668,7 @@ def wic_rm(args, native_sysroot):
> Remove files or directories from the vfat partition of
> partitioned image.
> """
> - disk = Disk(args.path.image, native_sysroot)
> + disk = Disk(args.path.image, native_sysroot,
> sector_size=args.sector_size)
> disk.remove(args.path.part, args.path.path, args.recursive_delete)
>
> def wic_write(args, native_sysroot):
> diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
> index 6b49a67de938..5d7c40456a80 100644
> --- a/scripts/lib/wic/help.py
> +++ b/scripts/lib/wic/help.py
> @@ -118,7 +118,7 @@ wic_create_usage = """
> usage: wic create <wks file or image name> [-o <DIRNAME> | --outdir
> <DIRNAME>]
> [-e | --image-name] [-s, --skip-build-check] [-D, --debug]
> [-r, --rootfs-dir] [-b, --bootimg-dir]
> - [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs]
> + [-k, --kernel-dir] [-n, --native-sysroot] [--sector-size
> <bytes>] [-f, --build-rootfs]
> [-c, --compress-with] [-m, --bmap]
>
> This command creates an OpenEmbedded image based on the 'OE kickstart
> @@ -139,13 +139,16 @@ SYNOPSIS
> wic create <wks file or image name> [-o <DIRNAME> | --outdir <DIRNAME>]
> [-e | --image-name] [-s, --skip-build-check] [-D, --debug]
> [-r, --rootfs-dir] [-b, --bootimg-dir]
> - [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs]
> + [-k, --kernel-dir] [-n, --native-sysroot] [--sector-size <bytes>]
> [-f, --build-rootfs]
> [-c, --compress-with] [-m, --bmap] [--no-fstab-update]
>
> DESCRIPTION
> This command creates an OpenEmbedded image based on the 'OE
> kickstart commands' found in the <wks file>.
>
> + Use the --sector-size option to select the sector size (in bytes)
> + used for partition layout calculations (default is 512).
> +
> In order to do this, wic needs to know the locations of the
> various build artifacts required to build the image.
>
> @@ -278,7 +281,7 @@ wic_ls_usage = """
>
> List content of a partitioned image
>
> - usage: wic ls <image>[:<partition>[<path>]] [--native-sysroot <path>]
> + usage: wic ls <image>[:<partition>[<path>]] [--native-sysroot <path>]
> [--sector-size <bytes>]
>
> This command outputs either list of image partitions or directory contents
> of vfat and ext* partitions.
> @@ -296,7 +299,7 @@ SYNOPSIS
> wic ls <image>
> wic ls <image>:<vfat or ext* partition>
> wic ls <image>:<vfat or ext* partition><path>
> - wic ls <image>:<vfat or ext* partition><path> --native-sysroot <path>
> + wic ls <image>:<vfat or ext* partition><path> --native-sysroot <path>
> [--sector-size <bytes>]
>
> DESCRIPTION
> This command lists either partitions of the image or directory contents
> @@ -336,6 +339,8 @@ DESCRIPTION
>
> The -n option is used to specify the path to the native sysroot
> containing the tools(parted and mtools) to use.
> + The --sector-size option sets the sector size used for partition math
> + (default is 512 bytes).
>
> """
>
> @@ -343,7 +348,7 @@ wic_cp_usage = """
>
> Copy files and directories to/from the vfat or ext* partition
>
> - usage: wic cp <src> <dest> [--native-sysroot <path>]
> + usage: wic cp <src> <dest> [--native-sysroot <path>] [--sector-size <bytes>]
>
> source/destination image in format <image>:<partition>[<path>]
>
> @@ -364,7 +369,7 @@ SYNOPSIS
> wic cp <src> <dest>:<partition>
> wic cp <src>:<partition> <dest>
> wic cp <src> <dest-image>:<partition><path>
> - wic cp <src> <dest-image>:<partition><path> --native-sysroot <path>
> + wic cp <src> <dest-image>:<partition><path> --native-sysroot <path>
> [--sector-size <bytes>]
>
> DESCRIPTION
> This command copies files or directories either
> @@ -408,13 +413,15 @@ DESCRIPTION
>
> The -n option is used to specify the path to the native sysroot
> containing the tools(parted and mtools) to use.
> + The --sector-size option sets the sector size used for partition math
> + (default is 512 bytes).
> """
>
> wic_rm_usage = """
>
> Remove files or directories from the vfat or ext* partitions
>
> - usage: wic rm <image>:<partition><path> [--native-sysroot <path>]
> + usage: wic rm <image>:<partition><path> [--native-sysroot <path>]
> [--sector-size <bytes>]
>
> This command removes files or directories from the vfat or ext* partitions
> of
> the partitioned image.
> @@ -466,6 +473,8 @@ DESCRIPTION
>
> The -n option is used to specify the path to the native sysroot
> containing the tools(parted and mtools) to use.
> + The --sector-size option sets the sector size used for partition math
> + (default is 512 bytes).
>
> The -r option is used to remove directories and their contents
> recursively,this only applies to ext* partition.
> diff --git a/scripts/lib/wic/misc.py b/scripts/lib/wic/misc.py
> index 1a7c140fa6c8..310e6367a2ad 100644
> --- a/scripts/lib/wic/misc.py
> +++ b/scripts/lib/wic/misc.py
> @@ -263,4 +263,10 @@ def get_bitbake_var(var, image=None, cache=True):
> Provide old get_bitbake_var API by wrapping
> get_var method of BB_VARS singleton.
> """
> + if var == "WIC_SECTOR_SIZE":
> + env_val = os.environ.get("WIC_SECTOR_SIZE")
> + if env_val is not None:
> + logger.warning("DEPRECATED: Using WIC_SECTOR_SIZE from
> environment; prefer --sector-size to avoid surprises.")
> + return env_val
> +
> return BB_VARS.get_var(var, image, cache)
> diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
> index 8fed686e903e..df6e3271649b 100644
> --- a/scripts/lib/wic/partition.py
> +++ b/scripts/lib/wic/partition.py
> @@ -65,6 +65,50 @@ class Partition():
>
> self.lineno = lineno
> self.source_file = ""
> + self.sector_size = 512
> +
> + def _mkdosfs_extraopts(self):
> + """
> + Build mkdosfs extra options ensuring the CLI sector size is applied.
> + """
> + extraopts = self.mkfs_extraopts or ''
> + tokens = []
> + skip_next = False
> + for tok in extraopts.split():
> + if skip_next:
> + skip_next = False
> + continue
> + if tok == '-S':
> + skip_next = True
> + continue
> + if tok.startswith('-S'):
> + continue
> + tokens.append(tok)
> + tokens.extend(['-S', str(self.sector_size)])
> + return ' '.join(tokens).strip()
This section needs a comment to explain what it's doing.
> +
> + def _mkfs_ext_extraopts(self, base_opts):
> + """
> + Build mkfs.ext* extra options ensuring the CLI sector size is
> applied.
> + """
> + extraopts = self.mkfs_extraopts or base_opts
> + # Only add an explicit block size when a non-default sector size is
> requested.
> + if self.sector_size and self.sector_size != 512:
self.sector_size should never be considered false now that we have a
default. So this can just be `if self.sector_size != 512`.
> + tokens = []
> + skip_next = False
> + for tok in extraopts.split():
> + if skip_next:
> + skip_next = False
> + continue
> + if tok == '-b':
> + skip_next = True
> + continue
> + if tok.startswith('-b'):
> + continue
> + tokens.append(tok)
> + tokens.extend(['-b', str(self.sector_size)])
> + return ' '.join(tokens).strip()
> + return extraopts
>
> def get_extra_block_count(self, current_blocks):
> """
> @@ -138,6 +182,8 @@ class Partition():
> Prepare content for individual partitions, depending on
> partition command parameters.
> """
> + # capture the sector size requested on the CLI for mkdosfs
> invocations
> + self.sector_size = getattr(creator, 'sector_size', 512) or 512
The third argument to getattr() is a default, so `or 512` is not
required.
> self.updated_fstab_path = updated_fstab_path
> if self.updated_fstab_path and not (self.fstype.startswith("ext") or
> self.fstype == "msdos"):
> self.update_fstab_in_rootfs = True
> @@ -293,7 +339,7 @@ class Partition():
> with open(rootfs, 'w') as sparse:
> os.ftruncate(sparse.fileno(), rootfs_size * 1024)
>
> - extraopts = self.mkfs_extraopts or "-F -i 8192"
> + extraopts = self._mkfs_ext_extraopts("-F -i 8192")
>
> # use hash_seed to generate reproducible ext4 images
> (extraopts, pseudo) = self.get_hash_seed_ext4(extraopts, pseudo)
> @@ -401,7 +447,7 @@ class Partition():
>
> size_str = ""
>
> - extraopts = self.mkfs_extraopts or '-S 512'
> + extraopts = self._mkdosfs_extraopts()
>
> dosfs_cmd = "mkdosfs %s -i %s %s %s -C %s %d" % \
> (label_str, self.fsuuid, size_str, extraopts, rootfs,
> @@ -452,7 +498,7 @@ class Partition():
> with open(rootfs, 'w') as sparse:
> os.ftruncate(sparse.fileno(), size * 1024)
>
> - extraopts = self.mkfs_extraopts or "-i 8192"
> + extraopts = self._mkfs_ext_extraopts("-i 8192")
>
> # use hash_seed to generate reproducible ext4 images
> (extraopts, pseudo) = self.get_hash_seed_ext4(extraopts, None)
> @@ -498,7 +544,7 @@ class Partition():
>
> size_str = ""
>
> - extraopts = self.mkfs_extraopts or '-S 512'
> + extraopts = self._mkdosfs_extraopts()
>
> dosfs_cmd = "mkdosfs %s -i %s %s %s -C %s %d" % \
> (label_str, self.fsuuid, extraopts, size_str, rootfs,
> @@ -559,4 +605,3 @@ class Partition():
> logger.warn("%s Inodes (of size %d) are too small." %
> (get_err_str(self), size))
> break
> -
> diff --git a/scripts/lib/wic/plugins/imager/direct.py
> b/scripts/lib/wic/plugins/imager/direct.py
> index ad922cfbf122..3adc6eee6280 100644
> --- a/scripts/lib/wic/plugins/imager/direct.py
> +++ b/scripts/lib/wic/plugins/imager/direct.py
> @@ -67,6 +67,7 @@ class DirectPlugin(ImagerPlugin):
> self._image = None
> self.ptable_format = self.ks.bootloader.ptable
> self.parts = self.ks.partitions
> + self.sector_size = options.sector_size or 512
Check if `or 512` is really needed here.
>
> # as a convenience, set source to the boot partition source
> # instead of forcing it to be set via bootloader --source
> @@ -78,7 +79,7 @@ class DirectPlugin(ImagerPlugin):
> image_path = self._full_path(self.workdir, self.parts[0].disk,
> "direct")
> self._image = PartitionedImage(image_path, self.ptable_format,
> self.ks.bootloader.diskid,
> self.parts, self.native_sysroot,
> - options.extra_space)
> + options.extra_space, self.sector_size)
>
> def setup_workdir(self, workdir):
> if workdir:
> @@ -294,15 +295,13 @@ MBR_OVERHEAD = 1
> # Overhead of the GPT partitioning scheme
> GPT_OVERHEAD = 34
>
> -# Size of a sector in bytes
> -SECTOR_SIZE = 512
> -
> class PartitionedImage():
> """
> Partitioned image in a file.
> """
>
> - def __init__(self, path, ptable_format, disk_id, partitions,
> native_sysroot=None, extra_space=0):
> + def __init__(self, path, ptable_format, disk_id, partitions,
> native_sysroot=None, extra_space=0,
> + sector_size=512):
> self.path = path # Path to the image file
> self.numpart = 0 # Number of allocated partitions
> self.realpart = 0 # Number of partitions in the partition table
> @@ -332,14 +331,7 @@ class PartitionedImage():
> self.partitions = partitions
> self.partimages = []
> # Size of a sector used in calculations
> - sector_size_str = get_bitbake_var('WIC_SECTOR_SIZE')
> - if sector_size_str is not None:
> - try:
> - self.sector_size = int(sector_size_str)
> - except ValueError:
> - self.sector_size = SECTOR_SIZE
> - else:
> - self.sector_size = SECTOR_SIZE
> + self.sector_size = sector_size or 512
A default is provided in the arguments list so `or 512` is not required.
>
> self.native_sysroot = native_sysroot
> num_real_partitions = len([p for p in self.partitions if not
> p.no_table])
> diff --git a/scripts/lib/wic/plugins/source/bootimg_efi.py
> b/scripts/lib/wic/plugins/source/bootimg_efi.py
> index 430b0a4b023a..864d6898fc9d 100644
> --- a/scripts/lib/wic/plugins/source/bootimg_efi.py
> +++ b/scripts/lib/wic/plugins/source/bootimg_efi.py
> @@ -415,8 +415,9 @@ class BootimgEFIPlugin(SourcePlugin):
>
> label = part.label if part.label else "ESP"
>
> - dosfs_cmd = "mkdosfs -v -n %s -i %s -C %s %d" % \
> - (label, part.fsuuid, bootimg, blocks)
> + sector_size = getattr(creator, 'sector_size', 512) or 512
The third argument to getattr() is a default, so `or 512` is not
required.
> + dosfs_cmd = "mkdosfs -v -n %s -i %s -S %d -C %s %d" % \
> + (label, part.fsuuid, sector_size, bootimg, blocks)
> exec_native_cmd(dosfs_cmd, native_sysroot)
> logger.debug("mkdosfs:\n%s" % (str(out)))
>
> diff --git a/scripts/lib/wic/plugins/source/bootimg_pcbios.py
> b/scripts/lib/wic/plugins/source/bootimg_pcbios.py
> index a7cc5d12c620..32edac47fa09 100644
> --- a/scripts/lib/wic/plugins/source/bootimg_pcbios.py
> +++ b/scripts/lib/wic/plugins/source/bootimg_pcbios.py
> @@ -132,7 +132,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
> cls._do_prepare_grub(part, cr_workdir, oe_builddir,
> kernel_dir, rootfs_dir, native_sysroot)
> elif source_params['loader-bios'] == 'syslinux':
> - cls._do_prepare_syslinux(part, cr_workdir, bootimg_dir,
> + cls._do_prepare_syslinux(part, creator, cr_workdir,
> bootimg_dir,
> kernel_dir, native_sysroot)
> else:
> raise WicError("unrecognized bootimg_pcbios loader: %s" %
> source_params['loader-bios'])
> @@ -142,7 +142,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
> except KeyError:
> # Required by do_install_disk
> cls.loader = 'syslinux'
> - cls._do_prepare_syslinux(part, cr_workdir, bootimg_dir,
> + cls._do_prepare_syslinux(part, creator, cr_workdir, bootimg_dir,
> kernel_dir, native_sysroot)
>
> @classmethod
> @@ -240,7 +240,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
> cfg.close()
>
> @classmethod
> - def _do_prepare_syslinux(cls, part, cr_workdir, bootimg_dir,
> + def _do_prepare_syslinux(cls, part, creator, cr_workdir, bootimg_dir,
> kernel_dir, native_sysroot):
> """
> Called to do the actual content population for a partition i.e. it
> @@ -292,8 +292,9 @@ class BootimgPcbiosPlugin(SourcePlugin):
>
> label = part.label if part.label else "boot"
>
> - dosfs_cmd = "mkdosfs -n %s -i %s -S 512 -C %s %d" % \
> - (label, part.fsuuid, bootimg, blocks)
> + sector_size = getattr(creator, 'sector_size', 512) or 512
As above.
> + dosfs_cmd = "mkdosfs -n %s -i %s -S %d -C %s %d" % \
> + (label, part.fsuuid, sector_size, bootimg, blocks)
> exec_native_cmd(dosfs_cmd, native_sysroot)
>
> mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
> diff --git a/scripts/lib/wic/plugins/source/isoimage_isohybrid.py
> b/scripts/lib/wic/plugins/source/isoimage_isohybrid.py
> index fdab188db1f8..9195ef5f3184 100644
> --- a/scripts/lib/wic/plugins/source/isoimage_isohybrid.py
> +++ b/scripts/lib/wic/plugins/source/isoimage_isohybrid.py
> @@ -367,8 +367,9 @@ class IsoImagePlugin(SourcePlugin):
>
> esp_label = source_params.get('esp_label', 'EFIimg')
>
> - dosfs_cmd = 'mkfs.vfat -n \'%s\' -S 512 -C %s %d' \
> - % (esp_label, bootimg, blocks)
> + sector_size = getattr(creator, 'sector_size', 512) or 512
As above.
> + dosfs_cmd = "mkfs.vfat -n '%s' -S %d -C %s %d" % \
> + (esp_label, sector_size, bootimg, blocks)
> exec_native_cmd(dosfs_cmd, native_sysroot)
>
> mmd_cmd = "mmd -i %s ::/EFI" % bootimg
> diff --git a/scripts/wic b/scripts/wic
> index 9137208f5e8f..7006efe5e76c 100755
> --- a/scripts/wic
> +++ b/scripts/wic
> @@ -103,6 +103,40 @@ class RootfsArgAction(argparse.Action):
> namespace.__dict__['rootfs_dir'][key] = rootfs_dir
>
>
> +def _apply_sector_size_default(args):
> + """
> + Populate args.sector_size.
> + Prefer --sector-size if given, WIC_SECTOR_SIZE if not, otherwise fall
> back to 512.
> + """
> + if not hasattr(args, "sector_size"):
> + return
> +
> + BB_VARS.vars_dir = args.vars_dir
> + try:
> + tmp_val = get_bitbake_var("WIC_SECTOR_SIZE", args.image_name)
> + if tmp_val:
> + try:
> + env_val = int(tmp_val)
> + except ValueError:
> + raise WicError("Invalid WIC_SECTOR_SIZE value '%s'; please
> provide an integer or use --sector-size." % tmp_val)
> +
> + if args.sector_size is not None:
> + logger.warning("WIC_SECTOR_SIZE (%d) and --sector-size (%d)
> were both provided; --sector-size used.", env_val, args.sector_size)
> + logger.warning("DEPRECATED: WIC_SECTOR_SIZE is deprecated
> and will be removed, use the --sector-size command-line argument instead.")
> + return
> + else:
> + logger.warning("WIC_SECTOR_SIZE (%s) provided but
> --sector-size not provided; use --sector-size to avoid confusion.", env_val)
> + logger.warning("DEPRECATED: WIC_SECTOR_SIZE is deprecated
> and will be removed, use the --sector-size command-line argument instead.")
> + args.sector_size = env_val
> + return
You can reduce duplication here. Also, `else` is not needed after a
return statement.
> + except:
> + pass
> +
> + if args.sector_size is not None:
> + return
> + args.sector_size = 512
> +
> +
> def wic_create_subcommand(options, usage_str):
> """
> Command-line handling for image creation. The real work is done
> @@ -376,6 +410,8 @@ def wic_init_parser_create(subparser):
> default="direct", help="the wic imager plugin")
> subparser.add_argument("--extra-space", type=int, dest="extra_space",
> default=0, help="additional free disk space to add to
> the image")
> + subparser.add_argument("--sector-size", dest="sector_size", type=int,
> default=None,
> + help="sector size in bytes (default: 512)")
> return
>
>
> @@ -413,6 +449,8 @@ def imgtype(arg):
> def wic_init_parser_ls(subparser):
> subparser.add_argument("path", type=imgtype,
> help="image spec: <image>[:<vfat
> partition>[<path>]]")
> + subparser.add_argument("--sector-size", dest="sector_size", type=int,
> default=None,
> + help="sector size in bytes (default: 512)")
> subparser.add_argument("-n", "--native-sysroot",
> help="path to the native sysroot containing the
> tools")
> subparser.add_argument("-e", "--image-name", dest="image_name",
> @@ -433,6 +471,8 @@ def wic_init_parser_cp(subparser):
> help="image spec: <image>:<vfat partition>[<path>]
> or <file>")
> subparser.add_argument("dest",
> help="image spec: <image>:<vfat partition>[<path>]
> or <file>")
> + subparser.add_argument("--sector-size", dest="sector_size", type=int,
> default=None,
> + help="sector size in bytes (default: 512)")
> subparser.add_argument("-n", "--native-sysroot",
> help="path to the native sysroot containing the
> tools")
> subparser.add_argument("-e", "--image-name", dest="image_name",
> @@ -445,6 +485,8 @@ def wic_init_parser_cp(subparser):
> def wic_init_parser_rm(subparser):
> subparser.add_argument("path", type=imgpathtype,
> help="path: <image>:<vfat partition><path>")
> + subparser.add_argument("--sector-size", dest="sector_size", type=int,
> default=None,
> + help="sector size in bytes (default: 512)")
> subparser.add_argument("-n", "--native-sysroot",
> help="path to the native sysroot containing the
> tools")
> subparser.add_argument("-r", dest="recursive_delete",
> action="store_true", default=False,
> @@ -569,6 +611,8 @@ def main(argv):
> if args.debug:
> logger.setLevel(logging.DEBUG)
>
> + _apply_sector_size_default(args)
> +
> if "command" in vars(args):
> if args.command == "help":
> if args.help_topic is None:
Best regards,
--
Paul Barker
signature.asc
Description: This is a digitally signed message part
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#231756): https://lists.openembedded.org/g/openembedded-core/message/231756 Mute This Topic: https://lists.openembedded.org/mt/117965967/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
