wic: Add 512 Byte alignment to --offset

Allows the --offset argument to use the "s" or "S" suffix to specify
that it is reporting the number of 512 byte sectors.

This is required for some SoCs where the mask ROM looks for an item at a
sector that isn't aligned to a 1KB boundary.

(From OE-Core rev: 938595d1dc4abaf5f7f3a7900add3f0492b805d0)

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Watt authored and Richard Purdie committed 2020-08-22 15:46:55 +01:00
1 parent 5359b85610
commit 5fa3c3d2e3
3 files changed
+42 -10

No files matched your search

+14 -6
View File
@@ -51,11 +51,11 @@ class KickStartParser(ArgumentParser):
def error(self, message):
raise ArgumentError(None, message)
def sizetype(default):
def sizetype(default, size_in_bytes=False):
def f(arg):
"""
Custom type for ArgumentParser
Converts size string in <num>[K|k|M|G] format into the integer value
Converts size string in <num>[S|s|K|k|M|G] format into the integer value
"""
try:
suffix = default
@@ -67,12 +67,20 @@ def sizetype(default):
except ValueError:
raise ArgumentTypeError("Invalid size: %r" % arg)
if size_in_bytes:
if suffix == 's' or suffix == 'S':
return size * 512
mult = 1024
else:
mult = 1
if suffix == "k" or suffix == "K":
return size
return size * mult
if suffix == "M":
return size * 1024
return size * mult * 1024
if suffix == "G":
return size * 1024 * 1024
return size * mult * 1024 * 1024
raise ArgumentTypeError("Invalid size: %r" % arg)
return f
@@ -141,7 +149,7 @@ class KickStart():
part.add_argument('mountpoint', nargs='?')
part.add_argument('--active', action='store_true')
part.add_argument('--align', type=int)
part.add_argument('--offset', type=sizetype("K"))
part.add_argument('--offset', type=sizetype("K", True))
part.add_argument('--exclude-path', nargs='+')
part.add_argument('--include-path', nargs='+', action='append')
part.add_argument('--change-directory')
+4 -4
View File
@@ -429,14 +429,14 @@ class PartitionedImage():
self.offset += align_sectors
if part.offset is not None:
offset = (part.offset * 1024) // self.sector_size
offset = part.offset // self.sector_size
if offset * self.sector_size != part.offset * 1024:
raise WicError("Could not place %s%s at offset %dK with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size))
if offset * self.sector_size != part.offset:
raise WicError("Could not place %s%s at offset %d with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size))
delta = offset - self.offset
if delta < 0:
raise WicError("Could not place %s%s at offset %dK: next free sector is %d (delta: %d)" % (part.disk, self.numpart, part.offset, self.offset, delta))
raise WicError("Could not place %s%s at offset %d: next free sector is %d (delta: %d)" % (part.disk, self.numpart, part.offset, self.offset, delta))
logger.debug("Skipping %d sectors to place %s%s at offset %dK",
delta, part.disk, self.numpart, part.offset)