output = []
if self.start:
output.append(f"start={self.start}MiB")
- if self.size:
+ if type(self.size) == int and self.size >= 0:
output.append(f"size={self.size}MiB")
if self.name:
output.append(f"name={self.name}")
def get_partition_index(self, binary):
return self.binaries.get(binary, None)
+class SdFusingTargetAB(SdFusingTarget):
+ def get_partition_index(self, binary):
+ if self.update == 'b':
+ return self.binaries_b.get(binary, None)
+ return self.binaries.get(binary, None)
+
class Rpi3(SdFusingTarget):
long_name = "Raspberry Pi 3"
part_table = [
self.user_partition = 4
super().__init__(device, "dos")
-class Rpi4(SdFusingTarget):
+class Rpi4Super(SdFusingTargetAB):
+ long_name = "Raspberry Pi 4 w/ super partition"
+ part_table = [
+ {"size": 64, "fstype": "vfat", "name": "boot_a","start": 4,
+ "ptype": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"},
+ {"size": 6656, "fstype": "ext4", "name": "super"},
+ {"size": 1344, "fstype": "ext4", "name": "system-data"},
+ {"size": 36, "fstype": "raw", "name": "none"},
+ {"size": None, "fstype": "ext4", "name": "user"},
+ {"size": 32, "fstype": "ext4", "name": "module_a"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk_a"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_a"},
+ {"size": 8, "fstype": "raw", "name": "inform"},
+ {"size": 0, "fstype": "raw", "name": "empty"},
+ {"size": 64, "fstype": "vfat", "name": "boot_b",
+ "ptype": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"},
+ {"size": 0, "fstype": "raw", "name": "empty"},
+ {"size": 32, "fstype": "ext4", "name": "module_b"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk_b"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_b"},
+ {"size": 0, "fstype": "raw", "name": "empty"},
+ {"size": 4, "fstype": "ext4", "name": "reserved0"},
+ {"size": 64, "fstype": "ext4", "name": "reserved1"},
+ {"size": 125, "fstype": "ext4", "name": "reserved2"}
+ ]
+ binaries = {
+ "boot.img": 1,
+ "super.img": 2,
+ "system-data.img": 3,
+ "user.img": 5,
+ "modules.img": 6,
+ "ramdisk.img": 7,
+ "ramdisk-recovery.img": 8,
+ }
+ binaries_b = {
+ "boot.img": 11,
+ "modules.img": 13,
+ "ramdisk.img": 14,
+ "ramdisk-recovery.img": 15,
+ }
+
+ def __init__(self, device, args):
+ self.reserved_space = 8
+ self.user_partition = 4
+ self.update = args.update
+ super().__init__(device, "gpt")
+
+class Rpi4(SdFusingTargetAB):
long_name = "Raspberry Pi 4"
part_table = [
- {"size": 64, "fstype": "vfat", "name": "boot_a", "start": 4,
+ {"size": 64, "fstype": "vfat", "name": "boot_a", "start": 4,
"ptype": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"},
- {"size": 3072, "fstype": "ext4", "name": "rootfs_a"},
- {"size": 1344, "fstype": "ext4", "name": "system-data"},
+ {"size": 3072, "fstype": "ext4", "name": "rootfs_a"},
+ {"size": 1344, "fstype": "ext4", "name": "system-data"},
{"size": 36, "fstype": "raw", "name": "none"},
- {"size": None, "fstype": "ext4", "name": "user"},
- {"size": 32, "fstype": "ext4", "name": "module_a"},
- {"size": 32, "fstype": "ext4", "name": "ramdisk_a"},
- {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_a"},
- {"size": 8, "fstype": "ext4", "name": "inform"},
- {"size": 256, "fstype": "ext4", "name": "hal_a"},
- {"size": 64, "fstype": "vfat", "name": "boot_b",
+ {"size": None, "fstype": "ext4", "name": "user"},
+ {"size": 32, "fstype": "ext4", "name": "module_a"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk_a"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_a"},
+ {"size": 8, "fstype": "ext4", "name": "inform"},
+ {"size": 256, "fstype": "ext4", "name": "hal_a"},
+ {"size": 64, "fstype": "vfat", "name": "boot_b",
"ptype": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"},
- {"size": 3072, "fstype": "ext4", "name": "rootfs_b"},
- {"size": 32, "fstype": "ext4", "name": "module_b"},
- {"size": 32, "fstype": "ext4", "name": "ramdisk_b"},
- {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_b"},
- {"size": 256, "fstype": "ext4", "name": "hal_b"},
- {"size": 4, "fstype": "ext4", "name": "param"},
- {"size": 64, "fstype": "ext4", "name": "reserved1"},
- {"size": 125, "fstype": "ext4", "name": "reserved2"},
+ {"size": 3072, "fstype": "ext4", "name": "rootfs_b"},
+ {"size": 32, "fstype": "ext4", "name": "module_b"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk_b"},
+ {"size": 32, "fstype": "ext4", "name": "ramdisk-recovery_b"},
+ {"size": 256, "fstype": "ext4", "name": "hal_b"},
+ {"size": 4, "fstype": "ext4", "name": "param"},
+ {"size": 64, "fstype": "ext4", "name": "reserved1"},
+ {"size": 125, "fstype": "ext4", "name": "reserved2"},
]
binaries = {
- "boot.img": 1,
- "rootfs.img": 2,
- "system-data.img": 3,
- "user.img": 5,
- "modules.img": 6,
- "ramdisk.img": 7,
- "ramdisk-recovery.img": 8,
- "hal.img": 10,
+ "boot.img": 1,
+ "rootfs.img": 2,
+ "system-data.img": 3,
+ "user.img": 5,
+ "modules.img": 6,
+ "ramdisk.img": 7,
+ "ramdisk-recovery.img": 8,
+ "hal.img": 10,
}
binaries_b = {
- "boot.img": 11,
- "rootfs.img": 12,
- "modules.img": 13,
- "ramdisk.img": 14,
- "ramdisk-recovery.img": 15,
- "hal.img": 16,
+ "boot.img": 11,
+ "rootfs.img": 12,
+ "modules.img": 13,
+ "ramdisk.img": 14,
+ "ramdisk-recovery.img": 15,
+ "hal.img": 16,
}
def __init__(self, device, args):
self.update = args.update
super().__init__(device, "gpt")
- def get_partition_index(self, binary):
- logging.debug(f"RPi4 get_partition_index: {binary} {repr(self.update)}")
- if self.update == 'b':
- self.binaries_b.get(binary, None)
- return self.binaries.get(binary, None)
-
class RV64(SdFusingTarget):
long_name = "QEMU RISC-V 64-bit"
part_table = [
TARGETS = {
'rpi3': Rpi3,
'rpi4': Rpi4,
+ 'rpi4s': Rpi4Super,
'vf2': VF2,
'rv64': RV64
}