Commit before push.

This commit is contained in:
cyteen 2024-03-13 03:50:15 +00:00
parent 8821c27510
commit 13e2de71e3
4 changed files with 165 additions and 36 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.img

View File

@ -1,6 +1,8 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
set -x set -x
# Problems: cgpt has a fixed set of partition Types by name or hex, not UUID.
# Partition table for root and boot # Partition table for root and boot
parted_type="gpt" parted_type="gpt"
gpt_idbloader=(64 8063) gpt_idbloader=(64 8063)
@ -97,7 +99,7 @@ cgpt add \
-t data \ -t data \
$workdir/${image_name}.img $workdir/${image_name}.img
sgdisk -p $workdir/${image_name}.img sgdisk --print $workdir/${image_name}.img
# cgpt add -h # cgpt add -h
# The partition type may also be given as one of these aliases: # The partition type may also be given as one of these aliases:

View File

@ -1,67 +1,193 @@
set -ex set -ex
# https://opensource.rock-chips.com/wiki_Partitions#GPT_partition_table_in_U-boot
# Default storage map
# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Partition Start Sector Number of Sectors Partition Size PartNum in GPT Requirements``
# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# MBR 0 00000000 1 00000001 512 0.5KB
# Primary GPT 1 00000001 63 0000003F 32256 31.5KB
# loader1 64 00000040 7104 00001bc0 4096000 2.5MB 1 preloader (miniloader or U-Boot SPL)
# Vendor Storage 7168 00001c00 512 00000200 262144 256KB SN, MAC and etc.
# Reserved Space 7680 00001e00 384 00000180 196608 192KB Not used
# reserved1 8064 00001f80 128 00000080 65536 64KB legacy DRM key
# U-Boot ENV 8128 00001fc0 64 00000040 32768 32KB
# reserved2 8192 00002000 8192 00002000 4194304 4MB legacy parameter
# loader2 16384 00004000 8192 00002000 4194304 4MB 2 U-Boot or UEFI
# trust 24576 00006000 8192 00002000 4194304 4MB 3 trusted-os like ATF, OP-TEE
# bootbootable must be set 32768 00008000 229376 00038000 117440512 112MB 4 kernel, dtb, extlinux.conf, ramdisk
# rootfs 262144 00040000 - - - -MB 5 Linux system
# Secondary GPT 16777183 00FFFFDF 33 00000021 16896 16.5KB
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# loader1 64 00000040 7104 00001bc0 4096000 2.5MB 1 preloader (miniloader or U-Boot SPL)
# reserved1 8064 00001f80 128 00000080 65536 64KB legacy DRM key
# reserved2 8192 00002000 8192 00002000 4194304 4MB legacy parameter
# loader2 16384 00004000 8192 00002000 4194304 4MB 2 U-Boot or UEFI
# trust 24576 00006000 8192 00002000 4194304 4MB 3 trusted-os like ATF, OP-TEE
# bootbootable must be set 32768 00008000 229376 00038000 117440512 112MB 4 kernel, dtb, extlinux.conf, ramdisk
# rootfs 262144 00040000 - - - -MB 5 Linux system
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#
# From u-boot
# "uuid_disk=${uuid_gpt_disk};" \
# "name=loader1,start=32K,size=4000K,uuid=${uuid_gpt_loader1};" \
# "name=reserved1,size=64K,uuid=${uuid_gpt_reserved1};" \
# "name=reserved2,size=4M,uuid=${uuid_gpt_reserved2};" \
# "name=loader2,size=4MB,uuid=${uuid_gpt_loader2};" \
# "name=atf,size=4M,uuid=${uuid_gpt_atf};" \
# "name=boot,size=128M,bootable,uuid=${uuid_gpt_boot};" \
# "name=rootfs,size=-,uuid=${uuid_gpt_rootfs};\0" \
#
#u-boot/out_mmc/built_in_env.txt:
#partitions=uuid_disk=${uuid_gpt_disk};
# name=loader1,start=32K,size=4000K,uuid=${uuid_gpt_loader1};
# name=loader2,start=8MB,size=4MB,uuid=${uuid_gpt_loader2};
# name=trust,size=4M,uuid=${uuid_gpt_atf};
# name=boot,size=112M,bootable,uuid=${uuid_gpt_boot};
# name=rootfs,size=-,uuid=B921B045-1DF0-41C3-AF44-4C6F280D3FAE;
DISK_NAME=${PWD}/decode-sgdisk.img DISK_NAME=${PWD}/decode-sgdisk.img
DISK_NAME=/dev/sdb DISK_NAME=/dev/sdb
# cleanup # cleanup
touch $DISK_NAME #touch $DISK_NAME
rm $DISK_NAME #rm $DISK_NAME
# Partition sizes in MiB # Partition sizes in MiB
IDBLOADER_SIZE=4 IDBLOADER_SIZE=4
UBOOT_SIZE=8 UBOOT_SIZE=4
TRUST_SIZE=12 TRUST_SIZE=4
BOOT_SIZE=16 BOOT_SIZE=112
ROOT_SIZE=128 ROOT_SIZE=128
# Define max sizes and offsets # Define max sizes and offsets
IDBLOADER_START=64 # was 64 but report it is not aligned, 2048, which is 1MB alignment. IDBLOADER_START=64 # was 64 but report it is not aligned, 2048, which is 1MB alignment.
IDBLOADER_OFFSET=$((${IDBLOADER_SIZE}*1024*1024/512)) # 8192 4MiB 8192 #IDBLOADER_END=7168
UBOOT_OFFSET=$((${UBOOT_SIZE}*1024*1024/512)) # 16382 8MiB 16384 #IDBLOADER_OFFSET=$((${IDBLOADER_SIZE}*1024*1024/512)) # 8192 4MiB 8192
TRUST_OFFSET=$((${TRUST_SIZE}*1024*1024/512)) # 24575 12MiB 24575 IDBLOADER_OFFSET=7104 # 7104 2.5MiB 7104
BOOT_OFFSET=$((${BOOT_SIZE}*1024*1024/512)) # 32768 16MiB 32768 UBOOT_START=16384
ROOT_OFFSET=$((${ROOT_SIZE}*1024*1024/512)) # 524288 128MiB 262144 UBOOT_OFFSET=$((${UBOOT_SIZE}*1024*1024/512)) # 16384 8MiB 16384
TRUST_OFFSET=$((${TRUST_SIZE}*1024*1024/512)) # 24575 12MiB 24575
BOOT_OFFSET=$((${BOOT_SIZE}*1024*1024/512)) # 32768 16MiB 32768
ROOT_OFFSET=$((${ROOT_SIZE}*1024*1024/512)) # 524288 128MiB 262144
MIN_SIZE=$((500*1000*1000/512)) # 976562 500MiB MIN_SIZE=$((500*1000*1000/512)) # 976562 500MiB
SIZE_STEP=$((100*1000*1000/512)) # 195312 100MiB SIZE_STEP=$((100*1000*1000/512)) # 195312 100MiB
MAX_SIZE=$((8*1000*1000*1000/512)) # 15625000 8GiB MAX_SIZE=$((8*1000*1000*1000/512)) # 15625000 8GiB
# https://github.com/uapi-group/specifications/blob/main/specs/discoverable_partitions_specification.md
SD_GPT_ROOT_ARM64="b921b045-1df0-41c3-af44-4c6f280d3fae"
SD_GPT_KERNEL_ARM64="b921b045-1df0-41c3-af44-4c6f280d3faf"
SD_GPT_USR_ARM64="b0e01050-ee5f-4390-949a-9101b17104e9"
SD_GPT_KERNEL="933ac7e1-2eb4-4f13-b844-0e14e2aef917"
SD_GPT_ROOT="933ac7e1-2eb4-4f13-b844-0e14e2aef916"
SD_GPT_BOOT="3b8f8425-20e0-4f3b-907f-1a25a76f98ea"
SD_GPT_ATF="3b8f8425-20e0-4f3b-907f-1a25a76f98eb"
SD_GPT_LOADER="3b8f8425-20e0-4f3b-907f-1a25a76f98ee"
SD_GPT_RESERVED="3b8f8425-20e0-4f3b-907f-1a25a76f98ec"
SD_GPT_HOME="933ac7e1-2eb4-4f13-b844-0e14e2aef915A" # 8302
SD_GPT_SRV="3b8f8425-20e0-4f3b-907f-1a25a76f98e8" # 8306
SD_GPT_VAR="4d21b016-b534-45c2-a9fb-5c16e091fd2d" # 8310
SD_GPT_VARTMP="7ec6f557-3bc5-4aca-b293-16ef5df639d1" # 8311
SD_GPT_TMP="7ec6f557-3bc5-4aca-b293-16ef5df639d1"
SD_GPT_SWAP="0657fd6d-a4ab-43c4-84e5-0933c84b4f4f" # 8200
SD_GPT_DATA="3b8f8425-20e0-4f3b-907f-1a25a76f98e9"
SD_GPT_SYSTEM="3b8f8425-20e0-4f3b-907f-1a25a76f98ed"
SD_GPT_ESP="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" # ef00
SD_GPT_UBOOT="3de21764-95bd-54bd-a5c3-4abe786f38a8"
SD_GPT_LINUX="0fc63daf-8483-4772-8e79-3d69d8477de4" # 8300
SD_GPT_ZFS="516E7CBA-6ECF-11D6-8FF8-00022D09712B"
# Extended boot loader, automatically mounted to /boot, second loctation for menu entries, kernel and intramfs separate from ESP/EFI
SD_GPT_XBOOTLDR="bc13c2ff-59e6-4262-a352-b275fd6f7172"
# Partition type Mountpoint gdisk's Partition type GUID
# code
# BIOS boot partition None ef02 21686148-6449-6e6f-744e-656564454649
# Linux x86-64 root (/) / 8304 4f68bce3-e8cd-4db1-96e7-fbcaf984b709
# Linux LVM Any 8e00 e6d6d379-f507-44c2-a23c-238f2a3df928
# Linux RAID Any fd00 a19d880f-05fc-4d3b-a006-743f0f84911e
# Linux LUKS Any 8309 ca7d7ccb-63ed-4c53-861c-1742536059cc
# Linux dm-crypt Any 8308 7ffec5c9-2d00-49b7-8941-3ea10a5586b7
# Partition Attribute Flags
# sgdisk --attribute="${PARTNUM}:=:"${SD_GPT_FLAG_READ_ONLY}" ${TARGET}
SD_GPT_FLAG_READ_ONLY="0x1000000000000000"
SD_GPT_FLAG_NO_AUTO="0x8000000000000000"
SD_GPT_FLAG_GROWFS="0x2000000000000000"
SD_GPT_FLAG_KERNEL="0x015A000000000000"
# set chip specific UUIDS
SD_GPT_ROOT=SD_GPT_ROOT_ARM64
SD_GPT_KERNEL=SD_GPT_KERNEL_ARM64
SD_GPT_USR=SD_GPT_USR_ARM64
# Create # Create
rm -f "$DISK_NAME" rm -f "$DISK_NAME"
truncate --size "$((MAX_SIZE*512))" "$DISK_NAME" truncate --size "$((MAX_SIZE*512))" "$DISK_NAME"
bootfs="fat32" #bootfs="fat32"
rootfs="ext2" bootfs="ext2"
rootfs="ext4"
alignment_type="optimal" # none, cylinder, minimal, optimal alignment_type="optimal" # none, cylinder, minimal, optimal
# Create partitions # Create partitions
echo Updating GPT... echo "Updating GPT..."
TARGET=${DISK_NAME} TARGET="${DISK_NAME}"
/sbin/sgdisk --zap-all ${TARGET} /sbin/sgdisk --zap-all "${TARGET}"
## Partition 3 - Create partition using start and end values for partitioning the `idbloader` partition. ## Partition 1 - Create partition using start and end values for partitioning the `idbloader` partition.
#STARTSECTOR=`/sbin/sgdisk --first-aligned-in-largest ${TARGET}|sed -sn 2p` echo "**** SD_GPT_LOADER=${SD_GPT_LOADER}"
STARTSECTOR=${IDBLOADER_START} #STARTSECTOR=`/sbin/sgdisk --first-aligned-in-largest "${TARGET}"|sed -sn 2p`
/sbin/sgdisk --print --set-alignment=64 --mbrtogpt --new=3:${STARTSECTOR}:+${IDBLOADER_SIZE}MB ${TARGET} STARTSECTOR="${IDBLOADER_START}" # 64 set above
/sbin/sgdisk --print --change-name=3:"idbloader" --typecode=3:8300 ${TARGET} PARTNUM=1
PARTLABEL="loader1"
#/sbin/sgdisk --print --set-alignment=${IDBLOADER_START} --mbrtogpt --new="${PARTNUM}":"${IDBLOADER_START}":+"${IDBLOADER_SIZE}"MB "${TARGET}"
#/sbin/sgdisk --print --set-alignment=1 --mbrtogpt --new="${PARTNUM}":"${IDBLOADER_START}":+"${IDBLOADER_SIZE}"MB "${TARGET}"
#/sbin/sgdisk --print --set-alignment=1 --mbrtogpt --new="${PARTNUM}":"${IDBLOADER_START}":8063 "${TARGET}"
/sbin/sgdisk --print --set-alignment=1 --mbrtogpt --new="${PARTNUM}":"${IDBLOADER_START}":+"${IDBLOADER_OFFSET}" "${TARGET}"
/sbin/sgdisk --print --change-name="${PARTNUM}":"${PARTLABEL}" --typecode="${PARTNUM}":"${SD_GPT_LOADER}" "${TARGET}"
## Partition 4 - Create partition using start and end values for partitioning the `uboot` partition. ## Partition 2 - Create partition using start and end values for partitioning the `uboot` partition to leave space for reserved1 and reserved2
ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` echo "**** SD_GPT_UBOOT=${SD_GPT_UBOOT}"
/sbin/sgdisk --print --new=4:-${UBOOT_SIZE}MB:${ENDSECTOR} ${TARGET} PARTNUM=2
/sbin/sgdisk --print --change-name=4:"uboot" --typecode=4:8300 ${TARGET} PARTLABEL="loader2"
#ENDSECTOR=$(/sbin/sgdisk --last-on-largest "${TARGET}"|sed -sn 2p)
#/sbin/sgdisk --print --new="${PARTNUM}":"${UBOOT_START}":-"${UBOOT_SIZE}"MB:"${ENDSECTOR}" "${TARGET}"
/sbin/sgdisk --print --new="${PARTNUM}":${UBOOT_START}:+"${UBOOT_SIZE}"MB "${TARGET}"
/sbin/sgdisk --print --change-name="${PARTNUM}":"${PARTLABEL}" --typecode=${PARTNUM}:"${SD_GPT_UBOOT}" "${TARGET}"
## Partition 5 - the 12MB partition for trust partition ## Partition 5 - the 12MB partition for trust partition
ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` echo "**** SD_GPT_ATF=${SD_GPT_ATF}"
/sbin/sgdisk --print --new=5:-${TRUST_SIZE}MB:${ENDSECTOR} ${TARGET} PARTNUM=3
/sbin/sgdisk --print --change-name=5:"atp" --typecode=5:8300 ${TARGET} PARTLABEL="trust"
#ENDSECTOR=$(/sbin/sgdisk --last-on-largest "${TARGET}"|sed -sn 2p)
#/sbin/sgdisk --print --new="${PARTNUM}":-"${TRUST_SIZE}"MB:"${ENDSECTOR}" "${TARGET}"
/sbin/sgdisk --print --new="${PARTNUM}"::+"${TRUST_SIZE}"MB "${TARGET}"
/sbin/sgdisk --print --change-name="${PARTNUM}":"${PARTLABEL}" --typecode="${PARTNUM}":"${SD_GPT_ATF}" "${TARGET}"
## Partition 1 - the 16MB partition for boot ## Partition 1 - the 16MB partition for bootfs
ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` echo "**** SD_GPT_BOOT=${SD_GPT_BOOT}"
/sbin/sgdisk --print --new=1:-${BOOT_SIZE}MB:${ENDSECTOR} ${TARGET} PARTNUM=4
/sbin/sgdisk --print --change-name=1:"boot" --typecode=1:EF00 ${TARGET} PARTLABEL="boot"
#ENDSECTOR=$(/sbin/sgdisk --last-on-largest "${TARGET}"|sed -sn 2p)
#/sbin/sgdisk --print --new="${PARTNUM}":-"${BOOT_SIZE}"MB:${ENDSECTOR} "${TARGET}"
/sbin/sgdisk --print --new="${PARTNUM}"::+"${BOOT_SIZE}"MB "${TARGET}"
/sbin/sgdisk --print --change-name="${PARTNUM}":"${PARTLABEL}" --typecode="${PARTNUM}":"${SD_GPT_BOOT}" "${TARGET}"
## Partition 2 - the main partition for root ## Partition 2 - the main partition for root
/sbin/sgdisk --print --largest-new=2 ${TARGET} echo "**** SD_GPT_BOOT_ARM64=${SD_GPT_ROOT}"
/sbin/sgdisk --print --change-name=2:root --typecode=2:8305 ${TARGET} PARTNUM=5
PARTLABEL="rootfs"
/sbin/sgdisk --print --largest-new="${PARTNUM}" "${TARGET}"
/sbin/sgdisk --print --change-name="${PARTNUM}":${PARTLABEL} --typecode="${PARTNUM}":${SD_GPT_ROOT_ARM64} "${TARGET}"
/sbin/sgdisk -print ${TARGET} /usr/bin/cgpt show "${TARGET}"
/sbin/sgdisk --move-second-header "${TARGET}"
partprobe "${TARGET}"

View File

@ -3,7 +3,7 @@ set -ex
DISK_NAME=${PWD}/decode-sgdisk.img DISK_NAME=${PWD}/decode-sgdisk.img
# cleanup # cleanup
touch $DISK_NAME touch $DISK_NAME
rm $DISK_NAME rm "${}DISK_NAME}"
# Partition sizes in MiB # Partition sizes in MiB
IDBLOADER_SIZE=4 IDBLOADER_SIZE=4