From 13e2de71e36be93cfe6e19787aec408a36ac86a2 Mon Sep 17 00:00:00 2001 From: cyteen Date: Wed, 13 Mar 2024 03:50:15 +0000 Subject: [PATCH] Commit before push. --- .gitignore | 1 + test-partitioning_cgpt.sh | 4 +- test-partitioning_sgdisk.sh | 194 ++++++++++++++++++++++++----- test-partitioning_sgdisk_ayufan.sh | 2 +- 4 files changed, 165 insertions(+), 36 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a89285e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.img diff --git a/test-partitioning_cgpt.sh b/test-partitioning_cgpt.sh index 1403b60..1dc200d 100755 --- a/test-partitioning_cgpt.sh +++ b/test-partitioning_cgpt.sh @@ -1,6 +1,8 @@ #!/usr/bin/env zsh set -x +# Problems: cgpt has a fixed set of partition Types by name or hex, not UUID. + # Partition table for root and boot parted_type="gpt" gpt_idbloader=(64 8063) @@ -97,7 +99,7 @@ cgpt add \ -t data \ $workdir/${image_name}.img -sgdisk -p $workdir/${image_name}.img +sgdisk --print $workdir/${image_name}.img # cgpt add -h # The partition type may also be given as one of these aliases: diff --git a/test-partitioning_sgdisk.sh b/test-partitioning_sgdisk.sh index fc42f79..b3f1119 100644 --- a/test-partitioning_sgdisk.sh +++ b/test-partitioning_sgdisk.sh @@ -1,67 +1,193 @@ 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 +# boot(bootable 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 +# boot(bootable 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=/dev/sdb # cleanup -touch $DISK_NAME -rm $DISK_NAME +#touch $DISK_NAME +#rm $DISK_NAME # Partition sizes in MiB IDBLOADER_SIZE=4 -UBOOT_SIZE=8 -TRUST_SIZE=12 -BOOT_SIZE=16 +UBOOT_SIZE=4 +TRUST_SIZE=4 +BOOT_SIZE=112 ROOT_SIZE=128 # Define max sizes and offsets 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 -UBOOT_OFFSET=$((${UBOOT_SIZE}*1024*1024/512)) # 16382 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 +#IDBLOADER_END=7168 +#IDBLOADER_OFFSET=$((${IDBLOADER_SIZE}*1024*1024/512)) # 8192 4MiB 8192 +IDBLOADER_OFFSET=7104 # 7104 2.5MiB 7104 +UBOOT_START=16384 +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 SIZE_STEP=$((100*1000*1000/512)) # 195312 100MiB 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 rm -f "$DISK_NAME" truncate --size "$((MAX_SIZE*512))" "$DISK_NAME" -bootfs="fat32" -rootfs="ext2" +#bootfs="fat32" +bootfs="ext2" +rootfs="ext4" alignment_type="optimal" # none, cylinder, minimal, optimal + # 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. -#STARTSECTOR=`/sbin/sgdisk --first-aligned-in-largest ${TARGET}|sed -sn 2p` -STARTSECTOR=${IDBLOADER_START} -/sbin/sgdisk --print --set-alignment=64 --mbrtogpt --new=3:${STARTSECTOR}:+${IDBLOADER_SIZE}MB ${TARGET} -/sbin/sgdisk --print --change-name=3:"idbloader" --typecode=3:8300 ${TARGET} +## Partition 1 - Create partition using start and end values for partitioning the `idbloader` partition. +echo "**** SD_GPT_LOADER=${SD_GPT_LOADER}" +#STARTSECTOR=`/sbin/sgdisk --first-aligned-in-largest "${TARGET}"|sed -sn 2p` +STARTSECTOR="${IDBLOADER_START}" # 64 set above +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. -ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` -/sbin/sgdisk --print --new=4:-${UBOOT_SIZE}MB:${ENDSECTOR} ${TARGET} -/sbin/sgdisk --print --change-name=4:"uboot" --typecode=4:8300 ${TARGET} +## Partition 2 - Create partition using start and end values for partitioning the `uboot` partition to leave space for reserved1 and reserved2 +echo "**** SD_GPT_UBOOT=${SD_GPT_UBOOT}" +PARTNUM=2 +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 -ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` -/sbin/sgdisk --print --new=5:-${TRUST_SIZE}MB:${ENDSECTOR} ${TARGET} -/sbin/sgdisk --print --change-name=5:"atp" --typecode=5:8300 ${TARGET} +echo "**** SD_GPT_ATF=${SD_GPT_ATF}" +PARTNUM=3 +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 -ENDSECTOR=`/sbin/sgdisk --end-of-largest ${TARGET}|sed -sn 2p` -/sbin/sgdisk --print --new=1:-${BOOT_SIZE}MB:${ENDSECTOR} ${TARGET} -/sbin/sgdisk --print --change-name=1:"boot" --typecode=1:EF00 ${TARGET} +## Partition 1 - the 16MB partition for bootfs +echo "**** SD_GPT_BOOT=${SD_GPT_BOOT}" +PARTNUM=4 +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 -/sbin/sgdisk --print --largest-new=2 ${TARGET} -/sbin/sgdisk --print --change-name=2:root --typecode=2:8305 ${TARGET} +echo "**** SD_GPT_BOOT_ARM64=${SD_GPT_ROOT}" +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}" diff --git a/test-partitioning_sgdisk_ayufan.sh b/test-partitioning_sgdisk_ayufan.sh index 7a651b9..e665e2c 100644 --- a/test-partitioning_sgdisk_ayufan.sh +++ b/test-partitioning_sgdisk_ayufan.sh @@ -3,7 +3,7 @@ set -ex DISK_NAME=${PWD}/decode-sgdisk.img # cleanup touch $DISK_NAME -rm $DISK_NAME +rm "${}DISK_NAME}" # Partition sizes in MiB IDBLOADER_SIZE=4