diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2020-08-21 14:46:23 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-08-22 15:46:55 +0100 |
commit | 5fa3c3d2e3aa29f4011670d6032e4f7debc88f73 (patch) | |
tree | cf22e082011738865dce0e0e4343aff2a5890afe /scripts | |
parent | 5359b85610f8a3e0a42d4817bb7df71436ab1192 (diff) | |
download | poky-5fa3c3d2e3aa29f4011670d6032e4f7debc88f73.tar.gz |
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>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/wic/ksparser.py | 20 | ||||
-rw-r--r-- | scripts/lib/wic/plugins/imager/direct.py | 8 |
2 files changed, 18 insertions, 10 deletions
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py index 3453d9cb9d..913e3283dc 100644 --- a/scripts/lib/wic/ksparser.py +++ b/scripts/lib/wic/ksparser.py | |||
@@ -51,11 +51,11 @@ class KickStartParser(ArgumentParser): | |||
51 | def error(self, message): | 51 | def error(self, message): |
52 | raise ArgumentError(None, message) | 52 | raise ArgumentError(None, message) |
53 | 53 | ||
54 | def sizetype(default): | 54 | def sizetype(default, size_in_bytes=False): |
55 | def f(arg): | 55 | def f(arg): |
56 | """ | 56 | """ |
57 | Custom type for ArgumentParser | 57 | Custom type for ArgumentParser |
58 | Converts size string in <num>[K|k|M|G] format into the integer value | 58 | Converts size string in <num>[S|s|K|k|M|G] format into the integer value |
59 | """ | 59 | """ |
60 | try: | 60 | try: |
61 | suffix = default | 61 | suffix = default |
@@ -67,12 +67,20 @@ def sizetype(default): | |||
67 | except ValueError: | 67 | except ValueError: |
68 | raise ArgumentTypeError("Invalid size: %r" % arg) | 68 | raise ArgumentTypeError("Invalid size: %r" % arg) |
69 | 69 | ||
70 | |||
71 | if size_in_bytes: | ||
72 | if suffix == 's' or suffix == 'S': | ||
73 | return size * 512 | ||
74 | mult = 1024 | ||
75 | else: | ||
76 | mult = 1 | ||
77 | |||
70 | if suffix == "k" or suffix == "K": | 78 | if suffix == "k" or suffix == "K": |
71 | return size | 79 | return size * mult |
72 | if suffix == "M": | 80 | if suffix == "M": |
73 | return size * 1024 | 81 | return size * mult * 1024 |
74 | if suffix == "G": | 82 | if suffix == "G": |
75 | return size * 1024 * 1024 | 83 | return size * mult * 1024 * 1024 |
76 | 84 | ||
77 | raise ArgumentTypeError("Invalid size: %r" % arg) | 85 | raise ArgumentTypeError("Invalid size: %r" % arg) |
78 | return f | 86 | return f |
@@ -141,7 +149,7 @@ class KickStart(): | |||
141 | part.add_argument('mountpoint', nargs='?') | 149 | part.add_argument('mountpoint', nargs='?') |
142 | part.add_argument('--active', action='store_true') | 150 | part.add_argument('--active', action='store_true') |
143 | part.add_argument('--align', type=int) | 151 | part.add_argument('--align', type=int) |
144 | part.add_argument('--offset', type=sizetype("K")) | 152 | part.add_argument('--offset', type=sizetype("K", True)) |
145 | part.add_argument('--exclude-path', nargs='+') | 153 | part.add_argument('--exclude-path', nargs='+') |
146 | part.add_argument('--include-path', nargs='+', action='append') | 154 | part.add_argument('--include-path', nargs='+', action='append') |
147 | part.add_argument('--change-directory') | 155 | part.add_argument('--change-directory') |
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py index 2f01999405..55db826e93 100644 --- a/scripts/lib/wic/plugins/imager/direct.py +++ b/scripts/lib/wic/plugins/imager/direct.py | |||
@@ -429,14 +429,14 @@ class PartitionedImage(): | |||
429 | self.offset += align_sectors | 429 | self.offset += align_sectors |
430 | 430 | ||
431 | if part.offset is not None: | 431 | if part.offset is not None: |
432 | offset = (part.offset * 1024) // self.sector_size | 432 | offset = part.offset // self.sector_size |
433 | 433 | ||
434 | if offset * self.sector_size != part.offset * 1024: | 434 | if offset * self.sector_size != part.offset: |
435 | raise WicError("Could not place %s%s at offset %dK with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size)) | 435 | raise WicError("Could not place %s%s at offset %d with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size)) |
436 | 436 | ||
437 | delta = offset - self.offset | 437 | delta = offset - self.offset |
438 | if delta < 0: | 438 | if delta < 0: |
439 | 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)) | 439 | 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)) |
440 | 440 | ||
441 | logger.debug("Skipping %d sectors to place %s%s at offset %dK", | 441 | logger.debug("Skipping %d sectors to place %s%s at offset %dK", |
442 | delta, part.disk, self.numpart, part.offset) | 442 | delta, part.disk, self.numpart, part.offset) |