Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | # SPDX-License-Identifier: GPL-2.0+ # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. """Create Android test disk images""" import collections import os import utils from test_android import test_abootimg def setup_android_image(config, log): """Create a 20MB disk image with Android partitions Args: config (ArbitraryAttributeContainer): Configuration log (multiplexed_log.Logfile): Log to write to """ Partition = collections.namedtuple('part', 'start,size,name') parts = {} disk_data = None def set_part_data(partnum, data): """Set the contents of a disk partition This updates disk_data by putting data in the right place Args: partnum (int): Partition number to set data (bytes): Data for that partition """ nonlocal disk_data start = parts[partnum].start * sect_size disk_data = disk_data[:start] + data + disk_data[start + len(data):] mmc_dev = 7 fname = os.path.join(config.source_dir, f'mmc{mmc_dev}.img') utils.run_and_log_no_ubman(log, f'qemu-img create {fname} 20M') utils.run_and_log_no_ubman(log, f'cgpt create {fname}') ptr = 40 # Number of sectors in 1MB sect_size = 512 sect_1mb = (1 << 20) // sect_size required_parts = [ {'num': 1, 'label':'misc', 'size': '1M'}, {'num': 2, 'label':'boot_a', 'size': '4M'}, {'num': 3, 'label':'boot_b', 'size': '4M'}, {'num': 4, 'label':'vendor_boot_a', 'size': '4M'}, {'num': 5, 'label':'vendor_boot_b', 'size': '4M'}, ] for part in required_parts: size_str = part['size'] if 'M' in size_str: size = int(size_str[:-1]) * sect_1mb else: size = int(size_str) utils.run_and_log_no_ubman( log, f"cgpt add -i {part['num']} -b {ptr} -s {size} -l {part['label']} -t basicdata {fname}") ptr += size utils.run_and_log_no_ubman(log, f'cgpt boot -p {fname}') out = utils.run_and_log_no_ubman(log, f'cgpt show -q {fname}') # Create a dict (indexed by partition number) containing the above info for line in out.splitlines(): start, size, num, name = line.split(maxsplit=3) parts[int(num)] = Partition(int(start), int(size), name) with open(fname, 'rb') as inf: disk_data = inf.read() test_abootimg.AbootimgTestDiskImage(config, log, 'bootv4.img', test_abootimg.boot_img_hex) boot_img = os.path.join(config.result_dir, 'bootv4.img') with open(boot_img, 'rb') as inf: set_part_data(2, inf.read()) test_abootimg.AbootimgTestDiskImage(config, log, 'vendor_boot.img', test_abootimg.vboot_img_hex) vendor_boot_img = os.path.join(config.result_dir, 'vendor_boot.img') with open(vendor_boot_img, 'rb') as inf: set_part_data(4, inf.read()) with open(fname, 'wb') as outf: outf.write(disk_data) print(f'wrote to {fname}') mmc_dev = 8 fname = os.path.join(config.source_dir, f'mmc{mmc_dev}.img') utils.run_and_log_no_ubman(log, f'qemu-img create {fname} 20M') utils.run_and_log_no_ubman(log, f'cgpt create {fname}') ptr = 40 # Number of sectors in 1MB sect_size = 512 sect_1mb = (1 << 20) // sect_size required_parts = [ {'num': 1, 'label':'misc', 'size': '1M'}, {'num': 2, 'label':'boot_a', 'size': '4M'}, {'num': 3, 'label':'boot_b', 'size': '4M'}, ] for part in required_parts: size_str = part['size'] if 'M' in size_str: size = int(size_str[:-1]) * sect_1mb else: size = int(size_str) utils.run_and_log_no_ubman( log, f"cgpt add -i {part['num']} -b {ptr} -s {size} -l {part['label']} -t basicdata {fname}") ptr += size utils.run_and_log_no_ubman(log, f'cgpt boot -p {fname}') out = utils.run_and_log_no_ubman(log, f'cgpt show -q {fname}') # Create a dict (indexed by partition number) containing the above info for line in out.splitlines(): start, size, num, name = line.split(maxsplit=3) parts[int(num)] = Partition(int(start), int(size), name) with open(fname, 'rb') as inf: disk_data = inf.read() test_abootimg.AbootimgTestDiskImage(config, log, 'boot.img', test_abootimg.img_hex) boot_img = os.path.join(config.result_dir, 'boot.img') with open(boot_img, 'rb') as inf: set_part_data(2, inf.read()) with open(fname, 'wb') as outf: outf.write(disk_data) print(f'wrote to {fname}') return fname |