Move mkdir_cond(), copy_partition(), and make_extlinux_disk() to a common module which can be used by the rest of the image-creation code.
Add myself as a maintainer for this new directory, and the test/py framework itself. Signed-off-by: Simon Glass <[email protected]> --- Changes in v2: - Rename the setup_extlinux_image() helper to make_extlinux_disk() MAINTAINERS | 5 +++ test/py/img/common.py | 86 ++++++++++++++++++++++++++++++++++++++++ test/py/tests/test_ut.py | 77 ++--------------------------------- 3 files changed, 94 insertions(+), 74 deletions(-) create mode 100644 test/py/img/common.py diff --git a/MAINTAINERS b/MAINTAINERS index 0dcc7243124..d33ea42116c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1829,6 +1829,11 @@ M: Liviu Dudau <[email protected]> S: Maintained F: drivers/video/tda19988.c +TEST FRAMEWORK (PYTHON) +M: Simon Glass <[email protected]> +F: test/py +F: test/py/img + TI LP5562 LED DRIVER M: Rasmus Villemoes <[email protected]> S: Supported diff --git a/test/py/img/common.py b/test/py/img/common.py new file mode 100644 index 00000000000..301b6c840d4 --- /dev/null +++ b/test/py/img/common.py @@ -0,0 +1,86 @@ +# SPDX-License-Identifier: GPL-2.0+ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + +"""Common utilities for image creation""" + +import gzip +import os + +import utils +from fs_helper import DiskHelper, FsHelper + + +def mkdir_cond(dirname): + """Create a directory if it doesn't already exist + + Args: + dirname (str): Name of directory to create + """ + if not os.path.exists(dirname): + os.mkdir(dirname) + + +def copy_partition(ubman, fsfile, outname): + """Copy a partition into a disk image + + Args: + ubman (ConsoleBase): U-Boot fixture + fsfile (str): Name of partition file + outname (str): Name of full-disk file to update + """ + utils.run_and_log(ubman, + f'dd if={fsfile} of={outname} bs=1M seek=1 conv=notrunc') + + +def make_extlinux_disk(ubman, devnum, basename, vmlinux, initrd, dtbdir, + script): + """Create a 20MB disk image with a single FAT partition + + Args: + ubman (ConsoleBase): Console to use + devnum (int): Device number to use, e.g. 1 + basename (str): Base name to use in the filename, e.g. 'mmc' + vmlinux (str): Kernel filename + initrd (str): Ramdisk filename + dtbdir (str or None): Devicetree filename + script (str): Script to place in the extlinux.conf file + """ + fsh = FsHelper(ubman.config, 'vfat', 18, prefix=basename) + fsh.setup() + + ext = os.path.join(fsh.srcdir, 'extlinux') + mkdir_cond(ext) + + conf = os.path.join(ext, 'extlinux.conf') + with open(conf, 'w', encoding='ascii') as fd: + print(script, file=fd) + + inf = os.path.join(ubman.config.persistent_data_dir, 'inf') + with open(inf, 'wb') as fd: + fd.write(gzip.compress(b'vmlinux')) + mkimage = ubman.config.build_dir + '/tools/mkimage' + utils.run_and_log( + ubman, f'{mkimage} -f auto -d {inf} {os.path.join(fsh.srcdir, vmlinux)}') + + with open(os.path.join(fsh.srcdir, initrd), 'w', encoding='ascii') as fd: + print('initrd', file=fd) + + if dtbdir: + mkdir_cond(os.path.join(fsh.srcdir, dtbdir)) + + dtb_file = os.path.join(fsh.srcdir, f'{dtbdir}/sandbox.dtb') + utils.run_and_log( + ubman, f'dtc -o {dtb_file}', stdin=b'/dts-v1/; / {};') + + fsh.mk_fs() + + img = DiskHelper(ubman.config, devnum, basename, True) + img.add_fs(fsh, DiskHelper.VFAT, bootable=True) + + ext4 = FsHelper(ubman.config, 'ext4', 1, prefix=basename) + ext4.setup() + ext4.mk_fs() + + img.add_fs(ext4, DiskHelper.EXT4) + img.create() + fsh.cleanup() diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index dce5a37dd35..01d01e3ade7 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -19,26 +19,8 @@ import utils from tests import fs_helper from fs_helper import DiskHelper, FsHelper from test_android import test_abootimg +from img.common import mkdir_cond, copy_partition, make_extlinux_disk -def mkdir_cond(dirname): - """Create a directory if it doesn't already exist - - Args: - dirname (str): Name of directory to create - """ - if not os.path.exists(dirname): - os.mkdir(dirname) - -def copy_partition(ubman, fsfile, outname): - """Copy a partition into a disk iamge - - Args: - ubman (ConsoleBase): U-Boot fixture - fsfile (str): Name of partition file - outname (str): Name of full-disk file to update - """ - utils.run_and_log(ubman, - f'dd if={fsfile} of={outname} bs=1M seek=1 conv=notrunc') def setup_bootmenu_image(ubman): """Create a 20MB disk image with a single ext4 partition @@ -159,59 +141,6 @@ booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} fsh.cleanup() -def setup_extlinux_image(ubman, devnum, basename, vmlinux, initrd, dtbdir, - script): - """Create a 20MB disk image with a single FAT partition - - Args: - ubman (ConsoleBase): Console to use - devnum (int): Device number to use, e.g. 1 - basename (str): Base name to use in the filename, e.g. 'mmc' - vmlinux (str): Kernel filename - initrd (str): Ramdisk filename - dtbdir (str or None): Devicetree filename - script (str): Script to place in the extlinux.conf file - """ - fsh = FsHelper(ubman.config, 'vfat', 18, prefix=basename) - fsh.setup() - - ext = os.path.join(fsh.srcdir, 'extlinux') - mkdir_cond(ext) - - conf = os.path.join(ext, 'extlinux.conf') - with open(conf, 'w', encoding='ascii') as fd: - print(script, file=fd) - - inf = os.path.join(ubman.config.persistent_data_dir, 'inf') - with open(inf, 'wb') as fd: - fd.write(gzip.compress(b'vmlinux')) - mkimage = ubman.config.build_dir + '/tools/mkimage' - utils.run_and_log( - ubman, f'{mkimage} -f auto -d {inf} {os.path.join(fsh.srcdir, vmlinux)}') - - with open(os.path.join(fsh.srcdir, initrd), 'w', encoding='ascii') as fd: - print('initrd', file=fd) - - if dtbdir: - mkdir_cond(os.path.join(fsh.srcdir, dtbdir)) - - dtb_file = os.path.join(fsh.srcdir, f'{dtbdir}/sandbox.dtb') - utils.run_and_log( - ubman, f'dtc -o {dtb_file}', stdin=b'/dts-v1/; / {};') - - fsh.mk_fs() - - img = DiskHelper(ubman.config, devnum, basename, True) - img.add_fs(fsh, DiskHelper.VFAT, bootable=True) - - ext4 = FsHelper(ubman.config, 'ext4', 1, prefix=basename) - ext4.setup() - ext4.mk_fs() - - img.add_fs(ext4, DiskHelper.EXT4) - img.create() - fsh.cleanup() - def setup_fedora_image(ubman, devnum, basename): """Create a 20MB Fedora disk image with a single FAT partition @@ -236,8 +165,8 @@ label Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl) append ro root=UUID=9732b35b-4cd5-458b-9b91-80f7047e0b8a rhgb quiet LANG=en_US.UTF-8 cma=192MB cma=256MB fdtdir /%s/ initrd /%s''' % (vmlinux, dtbdir, initrd) - setup_extlinux_image(ubman, devnum, basename, vmlinux, initrd, dtbdir, - script) + make_extlinux_disk(ubman, devnum, basename, vmlinux, initrd, dtbdir, + script) def setup_cros_image(ubman): """Create a 20MB disk image with ChromiumOS partitions""" -- 2.43.0

