Hi Mattijs, On Thu, Oct 15, 2026 at 3:55 PM Mattijs Korpershoek <[email protected]> wrote: > > There is quite some code duplication between the image creation for > mmc7.img and mmc8.img. If we want to add more images, this will be even > more duplication. > > Add a common function, create_gpt_image() which removes all the code > duplication. > > Signed-off-by: Mattijs Korpershoek <[email protected]> > --- > test/py/tests/test_android/android_image.py | 78 > +++++++---------------------- > 1 file changed, 19 insertions(+), 59 deletions(-) > > diff --git a/test/py/tests/test_android/android_image.py > b/test/py/tests/test_android/android_image.py > index 14dfd26fffd8..b5fede8ebf0b 100644 > --- a/test/py/tests/test_android/android_image.py > +++ b/test/py/tests/test_android/android_image.py > @@ -7,13 +7,12 @@ import os > import utils > from test_android import test_abootimg > > -def setup_android_image(ubman): > +Partition = collections.namedtuple('part', 'start,size,name') > + > +def create_gpt_image(ubman, mmc_dev, required_parts, images): > """Create a 20MB disk image with Android partitions""" > - Partition = collections.namedtuple('part', 'start,size,name') > parts = {} > disk_data = None > - > - mmc_dev = 7 > fname = os.path.join(ubman.config.source_dir, f'mmc{mmc_dev}.img') > utils.run_and_log(ubman, f'qemu-img create {fname} 20M') > utils.run_and_log(ubman, f'cgpt create {fname}') > @@ -24,14 +23,6 @@ def setup_android_image(ubman): > 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: > @@ -54,10 +45,6 @@ def setup_android_image(ubman): > with open(fname, 'rb') as inf: > disk_data = inf.read() > > - images = [ > - (2, 'bootv4.img', test_abootimg.boot_img_hex), > - (4, 'vendor_boot.img', test_abootimg.vboot_img_hex), > - ] > for partnum, img_name, hex_data in images: > test_abootimg.AbootimgTestDiskImage(ubman, img_name, hex_data) > img_path = os.path.join(ubman.config.result_dir, img_name) > @@ -69,55 +56,28 @@ def setup_android_image(ubman): > with open(fname, 'wb') as outf: > outf.write(disk_data) > > - mmc_dev = 8 > - fname = os.path.join(ubman.config.source_dir, f'mmc{mmc_dev}.img') > - utils.run_and_log(ubman, f'qemu-img create {fname} 20M') > - utils.run_and_log(ubman, f'cgpt create {fname}') > - > - ptr = 40 > - > - # Number of sectors in 1MB > - sect_size = 512 > - sect_1mb = (1 << 20) // sect_size > - > +def setup_android_image(ubman): > + mmc_dev = 7 > 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'}, > ] > + images = [ > + (2, 'bootv4.img', test_abootimg.boot_img_hex), > + (4, 'vendor_boot.img', test_abootimg.vboot_img_hex), > + ] > + create_gpt_image(ubman, mmc_dev, required_parts, images) > > - 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( > - ubman, > - f"cgpt add -i {part['num']} -b {ptr} -s {size} -l > {part['label']} -t basicdata {fname}") > - ptr += size > - > - utils.run_and_log(ubman, f'cgpt boot -p {fname}') > - out = utils.run_and_log(ubman, 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() > - > + mmc_dev = 8 > + required_parts = [ > + {'num': 1, 'label':'misc', 'size': '1M'}, > + {'num': 2, 'label':'boot_a', 'size': '4M'}, > + {'num': 3, 'label':'boot_b', 'size': '4M'}, > + ] > images = [ > (2, 'boot.img', test_abootimg.img_hex), > ] > - for partnum, img_name, hex_data in images: > - test_abootimg.AbootimgTestDiskImage(ubman, img_name, hex_data) > - img_path = os.path.join(ubman.config.result_dir, img_name) > - with open(img_path, 'rb') as inf: > - data = inf.read() > - start = parts[partnum].start * sect_size > - disk_data = disk_data[:start] + data + disk_data[start + len(data):] > - > - with open(fname, 'wb') as outf: > - outf.write(disk_data) > + create_gpt_image(ubman, mmc_dev, required_parts, images) > > -- > 2.56.0 >
Reviewed-by: Igor Opaniuk <[email protected]>
