From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Tue, 10 Oct 2023 21:16:45 +0200 Received: from metis.whiteo.stw.pengutronix.de ([2a0a:edc0:2:b01:1d::104]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqIDl-003U18-OR for lore@lore.pengutronix.de; Tue, 10 Oct 2023 21:16:45 +0200 Received: from localhost ([127.0.0.1] helo=metis.whiteo.stw.pengutronix.de) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1qqIDk-0007wZ-9K; Tue, 10 Oct 2023 21:16:44 +0200 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qqIDd-0007nF-M5; Tue, 10 Oct 2023 21:16:37 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqIDd-000jPb-7i; Tue, 10 Oct 2023 21:16:37 +0200 Received: from rhi by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1qqIDd-0009Xe-0b; Tue, 10 Oct 2023 21:16:37 +0200 From: Roland Hieber To: distrokit@pengutronix.de Date: Tue, 10 Oct 2023 21:16:31 +0200 Message-Id: <20231010191631.31141-6-rhi@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231010191631.31141-1-rhi@pengutronix.de> References: <20231010191631.31141-1-rhi@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [DistroKit] [PATCH 6/6] images: convert to GPT format X-BeenThere: distrokit@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: DistroKit Mailinglist List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Roland Hieber Sender: "DistroKit" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: distrokit-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false The GUID Partition Table format has several advantages over the legacy MBR format. Especially when we want to make use of systemd-repart functionality later, the GPT format is a necessity. Therefore, migrate all images to the GPT format. For some platforms (Raspberry Pi, AM355x, AT91), we still need a legacy MBR partition table so that the ROM code can find a bootable partition (which contains our barebox image). For those cases, transform the image into a hybrid format containing an MBR at offset 0, which contains the VFAT boot partition for the ROM loader, and a protective GPT partition of partition type 0xEE after it to claim the remaining space on the storage medium for GPT porpuses. Then a GPT header is added at the default GPT offset of 0x200, which defines the boot partition as well as the root partition, and which is read by Barebox and Linux to boot the system. For images that contain a raw barebox image at a fixed offset outside of a GPT partition, make sure that the GPT does not conflict with the barebox image, and write only the primary GPT header into the hole specified by the barebox image (offset 440 to 1K), but move the GPT partition array to an offset behind the barebox image. (genimage will then also offset the following partitions accordingly.) Remove any 'disk-signature' options, which are not compatible with GPT; genimage will generate a random Disk UUID instead. Also remove any partition type options which specify a 0x83 or 'Linux'/'L' partition type, which is the default assumed by genimage. For the rpi1 image-hdimg, overwrite the upstream hd.config with a hardcoded genimage config file since it is not possible to build a hybrid MBR/GPT image with the image recipe from upstream PTXdist. For the v7a image-hdimg, enable GPT support in the platformconfig menu, and re-add the respective config lines from the upstream version of the config file in order to make GPT work. The images with fixed partition sizes for qemu need to stay below the size specified in the 'size' option, so decrease the size of the last partition further to make space for the secondary GPT header, which will reside in the last block of the image. Signed-off-by: Roland Hieber --- configs/platform-mips/config/images/ar9331.config | 6 ++---- configs/platform-mips/config/images/malta.config | 6 ++---- .../platform-mipsel/config/images/malta.config | 6 ++---- configs/platform-rpi1/config/images/hd.config | 15 +++++++++++++++ configs/platform-rpi1/platformconfig | 4 ---- configs/platform-rpi1/platforms/image-hdimg.in | 11 +++++++++++ configs/platform-v7a/config/images/at91-sd.config | 5 ++--- .../platform-v7a/config/images/beaglebone.config | 6 ++---- configs/platform-v7a/config/images/gf.config | 5 ++--- configs/platform-v7a/config/images/hd.config | 4 ++-- .../platform-v7a/config/images/riotboard.config | 6 ++---- configs/platform-v7a/config/images/rpi2.config | 6 ++---- .../platform-v7a/config/images/sabrelite.config | 5 ++--- .../platform-v7a/config/images/udoo-neo.config | 5 ++--- .../platform-v7a/config/images/vexpress.config | 7 ++----- configs/platform-v7a/platformconfig | 2 +- .../config/images/at91-sd.config | 5 ++--- .../config/images/vexpress.config | 6 ++---- .../platform-v8a/config/images/espressobin.config | 3 +-- configs/platform-v8a/config/images/rock3a.config | 4 +--- 20 files changed, 57 insertions(+), 60 deletions(-) create mode 100644 configs/platform-rpi1/config/images/hd.config create mode 100644 configs/platform-rpi1/platforms/image-hdimg.in diff --git a/configs/platform-mips/config/images/ar9331.config b/configs/platform-mips/config/images/ar9331.config index 8012cf0f839d..f3aa28c78e53 100644 --- a/configs/platform-mips/config/images/ar9331.config +++ b/configs/platform-mips/config/images/ar9331.config @@ -3,17 +3,15 @@ image @IMAGE@ { size = 1G hdimage { align = 1M - disk-signature = 0x74823abf fill = true + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 512M } partition data { - partition-type = 0x83 - size = 511M + size = 510M } } diff --git a/configs/platform-mips/config/images/malta.config b/configs/platform-mips/config/images/malta.config index 8012cf0f839d..f3aa28c78e53 100644 --- a/configs/platform-mips/config/images/malta.config +++ b/configs/platform-mips/config/images/malta.config @@ -3,17 +3,15 @@ image @IMAGE@ { size = 1G hdimage { align = 1M - disk-signature = 0x74823abf fill = true + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 512M } partition data { - partition-type = 0x83 - size = 511M + size = 510M } } diff --git a/configs/platform-mipsel/config/images/malta.config b/configs/platform-mipsel/config/images/malta.config index 8012cf0f839d..f3aa28c78e53 100644 --- a/configs/platform-mipsel/config/images/malta.config +++ b/configs/platform-mipsel/config/images/malta.config @@ -3,17 +3,15 @@ image @IMAGE@ { size = 1G hdimage { align = 1M - disk-signature = 0x74823abf fill = true + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 512M } partition data { - partition-type = 0x83 - size = 511M + size = 510M } } diff --git a/configs/platform-rpi1/config/images/hd.config b/configs/platform-rpi1/config/images/hd.config new file mode 100644 index 000000000000..b67369d2c0c7 --- /dev/null +++ b/configs/platform-rpi1/config/images/hd.config @@ -0,0 +1,15 @@ +image @IMAGE@ { + hdimage { + align = 1M + partition-table-type = hybrid + } + partition boot-vfat { + image = boot.vfat + partition-type-uuid = F + partition-type = 0xc + bootable = true + } + partition root { + image = root.ext2 + } +} diff --git a/configs/platform-rpi1/platformconfig b/configs/platform-rpi1/platformconfig index 67e5f161cd78..8fd1b1983015 100644 --- a/configs/platform-rpi1/platformconfig +++ b/configs/platform-rpi1/platformconfig @@ -230,10 +230,6 @@ PTXCONF_IMAGE_BOOT_VFAT=y PTXCONF_IMAGE_BOOT_VFAT_GPU_MEM=16 # PTXCONF_IMAGE_HD_VDI is not set PTXCONF_IMAGE_HDIMG=y -# PTXCONF_IMAGE_HDIMG_GPT is not set -# PTXCONF_IMAGE_HDIMG_NONE is not set -# PTXCONF_IMAGE_HDIMG_BAREBOX is not set -PTXCONF_IMAGE_HDIMG_VFAT=y PTXCONF_IMAGE_KERNEL=y # diff --git a/configs/platform-rpi1/platforms/image-hdimg.in b/configs/platform-rpi1/platforms/image-hdimg.in new file mode 100644 index 000000000000..052e7e71df38 --- /dev/null +++ b/configs/platform-rpi1/platforms/image-hdimg.in @@ -0,0 +1,11 @@ +## SECTION=image + +config IMAGE_HDIMG + bool + select HOST_GENIMAGE + select IMAGE_BOOT_VFAT + select IMAGE_ROOT_EXT + prompt "Generate images/hd.img" + help + Build a harddisk root image. The image will contain one partition + containing the root.ext2 and a corresponding partition table. diff --git a/configs/platform-v7a/config/images/at91-sd.config b/configs/platform-v7a/config/images/at91-sd.config index 641db071224f..e1522462815c 100644 --- a/configs/platform-v7a/config/images/at91-sd.config +++ b/configs/platform-v7a/config/images/at91-sd.config @@ -9,19 +9,18 @@ image @IMAGE@-boot.vfat { image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x67823abf + partition-table-type = hybrid } partition boot { image = @IMAGE@-boot.vfat partition-type = 0xc + partition-type-uuid = F bootable = true } partition root-A { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/beaglebone.config b/configs/platform-v7a/config/images/beaglebone.config index 07d251bfbe69..135a49b3908b 100644 --- a/configs/platform-v7a/config/images/beaglebone.config +++ b/configs/platform-v7a/config/images/beaglebone.config @@ -9,23 +9,21 @@ image beaglebone-boot.vfat { image @IMAGE@ { hdimage { align = 1M - disk-signature = 0xabe26147 + partition-table-type = hybrid } partition boot { image = beaglebone-boot.vfat partition-type = 0xc + partition-type-uuid = F bootable = true } partition root-A { image = root.ext2 - partition-type = 0x83 } partition root-B { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/gf.config b/configs/platform-v7a/config/images/gf.config index fbaddf15f527..ed6fd3ba2bbb 100644 --- a/configs/platform-v7a/config/images/gf.config +++ b/configs/platform-v7a/config/images/gf.config @@ -9,19 +9,18 @@ image gf-boot.vfat { image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x74823abf + partition-table-type = hybrid } partition boot { image = gf-boot.vfat partition-type = 0xc + partition-type-uuid = F bootable = true } partition root-A { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/hd.config b/configs/platform-v7a/config/images/hd.config index 03cf37a0dbcf..d33ddc43490a 100644 --- a/configs/platform-v7a/config/images/hd.config +++ b/configs/platform-v7a/config/images/hd.config @@ -4,11 +4,11 @@ image @IMAGE@ { hdimage { align = 1M - disk-signature = 0xdfb978e3 + partition-table-type = "@PARTITION_TABLE_TYPE@" } @BOOTLOADER_PARTITIONS@ partition root { image = root.ext2 - partition-type = 0x83 + partition-type@PARTITION_TYPE_SUFFIX@ = @ROOT_PARTITION_TYPE@ } } diff --git a/configs/platform-v7a/config/images/riotboard.config b/configs/platform-v7a/config/images/riotboard.config index f311fd5e41b0..f10858cbb0bd 100644 --- a/configs/platform-v7a/config/images/riotboard.config +++ b/configs/platform-v7a/config/images/riotboard.config @@ -1,7 +1,8 @@ image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x67bac764 + partition-table-type = gpt + gpt-location = 2M } partition barebox { @@ -13,16 +14,13 @@ image @IMAGE@ { partition root-A { image = root.ext2 - partition-type = 0x83 } partition root-B { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/rpi2.config b/configs/platform-v7a/config/images/rpi2.config index eebf7052713f..78b46b92ffa5 100644 --- a/configs/platform-v7a/config/images/rpi2.config +++ b/configs/platform-v7a/config/images/rpi2.config @@ -10,24 +10,22 @@ image rpi2-boot.vfat { image @IMAGE@ { hdimage { align = 1M - disk-signature = 0xbedf7893 + partition-table-type = hybrid } partition boot { offset = 4M image = rpi2-boot.vfat partition-type = 0xc + partition-type-uuid = F bootable = true } partition root-A { image = root.ext2 - partition-type = 0x83 } partition root-B { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/sabrelite.config b/configs/platform-v7a/config/images/sabrelite.config index 29e6b5f5a44a..b362534c4346 100644 --- a/configs/platform-v7a/config/images/sabrelite.config +++ b/configs/platform-v7a/config/images/sabrelite.config @@ -1,7 +1,8 @@ image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x67bac764 + partition-table-type = gpt + gpt-location = 2M } partition barebox { @@ -13,10 +14,8 @@ image @IMAGE@ { partition root-A { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/udoo-neo.config b/configs/platform-v7a/config/images/udoo-neo.config index da677757804d..0dbed62e9441 100644 --- a/configs/platform-v7a/config/images/udoo-neo.config +++ b/configs/platform-v7a/config/images/udoo-neo.config @@ -1,7 +1,8 @@ image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x374ac764 + partition-table-type = gpt + gpt-location = 2M } partition barebox { @@ -13,10 +14,8 @@ image @IMAGE@ { partition root-A { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a/config/images/vexpress.config b/configs/platform-v7a/config/images/vexpress.config index ba677fc3c946..41424f79724c 100644 --- a/configs/platform-v7a/config/images/vexpress.config +++ b/configs/platform-v7a/config/images/vexpress.config @@ -3,22 +3,19 @@ image @IMAGE@ { size = 256M hdimage { align = 1M - disk-signature = 0x74823abf fill = true + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 96M } partition root-B { image = root.ext2 - partition-type = 0x83 size = 96M } partition data { - partition-type = 0x83 - size = 63M + size = 62M } } diff --git a/configs/platform-v7a/platformconfig b/configs/platform-v7a/platformconfig index 1e83fb3620cd..63e98e7ff4af 100644 --- a/configs/platform-v7a/platformconfig +++ b/configs/platform-v7a/platformconfig @@ -242,7 +242,7 @@ PTXCONF_IMAGE_BEAGLEBONE=y PTXCONF_IMAGE_GF=y # PTXCONF_IMAGE_HD_VDI is not set PTXCONF_IMAGE_HDIMG=y -# PTXCONF_IMAGE_HDIMG_GPT is not set +PTXCONF_IMAGE_HDIMG_GPT=y PTXCONF_IMAGE_HDIMG_NONE=y # PTXCONF_IMAGE_HDIMG_BAREBOX is not set # PTXCONF_IMAGE_HDIMG_VFAT is not set diff --git a/configs/platform-v7a_noneon/config/images/at91-sd.config b/configs/platform-v7a_noneon/config/images/at91-sd.config index caecd247065a..e8a4592b5c05 100644 --- a/configs/platform-v7a_noneon/config/images/at91-sd.config +++ b/configs/platform-v7a_noneon/config/images/at91-sd.config @@ -9,19 +9,18 @@ image @IMAGE@-boot.vfat { image @IMAGE@ { hdimage { align = 1M - disk-signature = 0x67823abf + partition-table-type = hybrid } partition boot { image = @IMAGE@-boot.vfat partition-type = 0xc + partition-type-uuid = F bootable = true } partition root-A { image = root.ext2 - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v7a_noneon/config/images/vexpress.config b/configs/platform-v7a_noneon/config/images/vexpress.config index 5291cb31e385..bd82e3b8a4f6 100644 --- a/configs/platform-v7a_noneon/config/images/vexpress.config +++ b/configs/platform-v7a_noneon/config/images/vexpress.config @@ -3,17 +3,15 @@ image @IMAGE@ { size = 256M hdimage { align = 1M - disk-signature = 0x74823abf fill = true + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 192M } partition data { - partition-type = 0x83 - size = 63M + size = 62M } } diff --git a/configs/platform-v8a/config/images/espressobin.config b/configs/platform-v8a/config/images/espressobin.config index c4ab201691a9..ec6fac6b19ec 100644 --- a/configs/platform-v8a/config/images/espressobin.config +++ b/configs/platform-v8a/config/images/espressobin.config @@ -1,14 +1,13 @@ image @IMAGE@ { hdimage { align = 1M + partition-table-type = gpt } partition root-A { image = root.ext2 - partition-type = 0x83 size = 512M } partition data { - partition-type = 0x83 size = 512M } } diff --git a/configs/platform-v8a/config/images/rock3a.config b/configs/platform-v8a/config/images/rock3a.config index 522d82cdc9c9..c3edc9617c86 100644 --- a/configs/platform-v8a/config/images/rock3a.config +++ b/configs/platform-v8a/config/images/rock3a.config @@ -1,7 +1,7 @@ image @IMAGE@ { hdimage { align = 1M - disk-signature = 0xf5feaddc + partition-table-type = gpt } partition boot1 { offset = 32k @@ -24,10 +24,8 @@ image @IMAGE@ { partition root-A { offset = 5M image = "root.ext2" - partition-type = 0x83 } partition data { - partition-type = 0x83 size = 512M } } -- 2.39.2