avbtool: make_vbmeta_image: Add --padding_size option.
This can be used to ensure the size of vbmeta.img is a multiple of
e.g. 4096 bytes.
Bug: 38454093
Test: New unit test and all unit tests pass.
Change-Id: I260003ce4ae127eb89ce0b547d5c5920dbe6b6e5
diff --git a/avbtool b/avbtool
index eea7664..17b8a0d 100755
--- a/avbtool
+++ b/avbtool
@@ -2353,7 +2353,8 @@
signing_helper_with_files,
release_string,
append_to_release_string,
- print_required_libavb_version):
+ print_required_libavb_version,
+ padding_size):
"""Implements the 'make_vbmeta_image' command.
Arguments:
@@ -2374,6 +2375,7 @@
release_string: None or avbtool release string to use instead of default.
append_to_release_string: None or string to append.
print_required_libavb_version: True to only print required libavb version.
+ padding_size: If not 0, pads output so size is a multiple of the number.
Raises:
AvbError: If a chained partition is malformed.
@@ -2403,6 +2405,11 @@
output.seek(0)
output.write(vbmeta_blob)
+ if padding_size > 0:
+ padded_size = round_to_multiple(len(vbmeta_blob), padding_size)
+ padding_needed = padded_size - len(vbmeta_blob)
+ output.write('\0' * padding_needed)
+
def _generate_vbmeta_blob(self, algorithm_name, key_path,
public_key_metadata_path, descriptors,
chain_partitions,
@@ -3532,6 +3539,12 @@
sub_parser.add_argument('--output',
help='Output file name',
type=argparse.FileType('wb'))
+ sub_parser.add_argument('--padding_size',
+ metavar='NUMBER',
+ help='If non-zero, pads output with NUL bytes so '
+ 'its size is a multiple of NUMBER (default: 0)',
+ type=parse_number,
+ default=0)
self._add_common_args(sub_parser)
sub_parser.set_defaults(func=self.make_vbmeta_image)
@@ -3808,7 +3821,8 @@
args.signing_helper_with_files,
args.internal_release_string,
args.append_to_release_string,
- args.print_required_libavb_version)
+ args.print_required_libavb_version,
+ args.padding_size)
def append_vbmeta_image(self, args):
"""Implements the 'append_vbmeta_image' sub-command."""