test/py/tests: Move "setup_image" from test_ut.py to fs_helper.py

The generic function in test_ut.py to create a disk image with partition
table can be useful outside of test_ut.py so move it to be available
more clearly.

To make this a bit more easily used library function, make use of
check_call directly rather than calling things though u_boot_utils. In
turn, to more easily handle stdin here, use the shell "printf" utility
to pass sfdisk the specification to create as we do not have an actual
file descriptor to use here.

Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Tom Rini
2025-03-20 07:59:24 -06:00
parent f98d2a3127
commit fce92e304f
2 changed files with 38 additions and 34 deletions

View File

@@ -69,6 +69,40 @@ def mk_fs(config, fs_type, size, prefix, src_dir=None, size_gran = 0x100000):
call(f'rm -f {fs_img}', shell=True)
raise
def setup_image(ubman, devnum, part_type, img_size=20, second_part=False,
basename='mmc'):
"""Create a disk image with a single partition
Args:
ubman (ConsoleBase): Console to use
devnum (int): Device number to use, e.g. 1
part_type (int): Partition type, e.g. 0xc for FAT32
img_size (int): Image size in MiB
second_part (bool): True to contain a small second partition
basename (str): Base name to use in the filename, e.g. 'mmc'
Returns:
tuple:
str: Filename of MMC image
str: Directory name of scratch directory
"""
fname = os.path.join(ubman.config.source_dir, f'{basename}{devnum}.img')
mnt = os.path.join(ubman.config.persistent_data_dir, 'scratch')
spec = f'type={part_type:x}, size={img_size - 2}M, start=1M, bootable'
if second_part:
spec += '\ntype=c'
try:
check_call(f'mkdir -p {mnt}', shell=True)
check_call(f'qemu-img create {fname} 20M', shell=True)
check_call(f'printf "{spec}" | sfdisk {fname}', shell=True)
except CalledProcessError:
call(f'rm -f {fname}', shell=True)
raise
return fname, mnt
# Just for trying out
if __name__ == "__main__":
import collections