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
if not os.path.exists(dirname):
os.mkdir(dirname)
-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')
- mkdir_cond(mnt)
-
- spec = f'type={part_type:x}, size={img_size - 2}M, start=1M, bootable'
- if second_part:
- spec += '\ntype=c'
-
- utils.run_and_log(ubman, f'qemu-img create {fname} 20M')
- utils.run_and_log(ubman, f'sfdisk {fname}',
- stdin=spec.encode('utf-8'))
- return fname, mnt
-
def setup_bootmenu_image(ubman):
"""Create a 20MB disk image with a single ext4 partition
This is modelled on Armbian 22.08 Jammy
"""
mmc_dev = 4
- fname, mnt = setup_image(ubman, mmc_dev, 0x83)
+ fname, mnt = fs_helper.setup_image(ubman, mmc_dev, 0x83)
script = '''# DO NOT EDIT THIS FILE
#
def setup_bootflow_image(ubman):
"""Create a 20MB disk image with a single FAT partition"""
mmc_dev = 1
- fname, mnt = setup_image(ubman, mmc_dev, 0xc, second_part=True)
+ fname, mnt = fs_helper.setup_image(ubman, mmc_dev, 0xc, second_part=True)
vmlinux = 'vmlinuz-5.3.7-301.fc31.armv7hl'
initrd = 'initramfs-5.3.7-301.fc31.armv7hl.img'
"""Create a 20MB disk image with an EFI app on it"""
devnum = 1
basename = 'flash'
- fname, mnt = setup_image(ubman, devnum, 0xc, second_part=True,
- basename=basename)
+ fname, mnt = fs_helper.setup_image(ubman, devnum, 0xc, second_part=True,
+ basename=basename)
efi_dir = os.path.join(mnt, 'EFI')
mkdir_cond(efi_dir)