mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
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:
parent
5359b85610
commit
5fa3c3d2e3
|
@ -889,6 +889,30 @@ class Wic2(WicTestCase):
|
|||
"2:103424kiB:205824kiB:102400kiB:ext4:primary:;",
|
||||
])
|
||||
|
||||
with NamedTemporaryFile("w", suffix=".wks") as tempf:
|
||||
# Test that partitions can be placed on a 512 byte sector boundary
|
||||
tempf.write("bootloader --ptable gpt\n" \
|
||||
"part / --source rootfs --ondisk hda --offset 65s --fixed-size 99M --fstype=ext4\n" \
|
||||
"part /bar --ondisk hda --offset 102432 --fixed-size 100M --fstype=ext4\n")
|
||||
tempf.flush()
|
||||
|
||||
_, partlns = self._get_wic_partitions(tempf.name, native_sysroot)
|
||||
self.assertEqual(partlns, [
|
||||
"1:32.5kiB:101408kiB:101376kiB:ext4:primary:;",
|
||||
"2:102432kiB:204832kiB:102400kiB:ext4:primary:;",
|
||||
])
|
||||
|
||||
with NamedTemporaryFile("w", suffix=".wks") as tempf:
|
||||
# Test that a partition can be placed immediately after a MSDOS partition table
|
||||
tempf.write("bootloader --ptable msdos\n" \
|
||||
"part / --source rootfs --ondisk hda --offset 1s --fixed-size 100M --fstype=ext4\n")
|
||||
tempf.flush()
|
||||
|
||||
_, partlns = self._get_wic_partitions(tempf.name, native_sysroot)
|
||||
self.assertEqual(partlns, [
|
||||
"1:0.50kiB:102400kiB:102400kiB:ext4::;",
|
||||
])
|
||||
|
||||
with NamedTemporaryFile("w", suffix=".wks") as tempf:
|
||||
# Test that image creation fails if the partitions would overlap
|
||||
tempf.write("bootloader --ptable gpt\n" \
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user