| """Extract information about vbmeta (digest/size) required in (androidboot.*) |
| bootconfig. It uses avbtool to find some values such as vbmeta size, digest""" |
| #!/usr/bin/env python3 |
| |
| import sys |
| import subprocess |
| |
| def main(args): |
| """Runs avbtool to generate vbmeta related bootconfigs""" |
| avbtool = args[0] |
| vbmeta_img = args[1] |
| hash_algorithm = 'sha256' |
| size = 0 |
| |
| with subprocess.Popen([avbtool, 'version'], |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT) as proc: |
| stdout, _ = proc.communicate() |
| avb_version = stdout.decode("utf-8").split(" ")[1].strip() |
| avb_version = avb_version[0:avb_version.rfind('.')] |
| |
| with subprocess.Popen([avbtool, 'info_image', '--image', vbmeta_img], |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT) as proc: |
| stdout, _ = proc.communicate() |
| for line in stdout.decode("utf-8").split("\n"): |
| line = line.split(":") |
| if line[0] in \ |
| ['Header Block', 'Authentication Block', 'Auxiliary Block']: |
| size += int(line[1].strip()[0:-6]) |
| |
| with subprocess.Popen([avbtool, 'calculate_vbmeta_digest', |
| '--image', vbmeta_img, |
| '--hash_algorithm', hash_algorithm], |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT) as proc: |
| stdout, _ = proc.communicate() |
| vbmeta_hash = stdout.decode("utf-8").strip() |
| |
| print(f'androidboot.vbmeta.size = {size}') |
| print(f'androidboot.vbmeta.digest = \"{vbmeta_hash}\"') |
| print(f'androidboot.vbmeta.hash_alg = \"{hash_algorithm}\"') |
| print(f'androidboot.vbmeta.avb_version = \"{avb_version}\"') |
| print('androidboot.veritymode = "enforcing"') |
| print('androidboot.vbmeta.invalidate_on_error = "yes"') |
| print('androidboot.vbmeta.device_state = "locked"') |
| print('androidboot.vbmeta.device = "/dev/block/by-name/vbmeta_a"') |
| print('androidboot.slot_suffix = "_a"') |
| print('androidboot.force_normal_boot = "1"') |
| print('androidboot.verifiedbootstate = "green"') |
| |
| ## Main body |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |