DistroKit Mailinglist
 help / color / mirror / Atom feed
From: Michael Olbrich <m.olbrich@pengutronix.de>
To: Roland Hieber <rhi@pengutronix.de>
Cc: distrokit@pengutronix.de
Subject: Re: [DistroKit] [PATCH 6/6] images: convert to GPT format
Date: Wed, 11 Oct 2023 08:58:31 +0200	[thread overview]
Message-ID: <ZSZHl8ENEI/TY4Iq@pengutronix.de> (raw)
In-Reply-To: <20231010191631.31141-6-rhi@pengutronix.de>

On Tue, Oct 10, 2023 at 09:16:31PM +0200, Roland Hieber wrote:
> 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

s/porpuses/purposes/

> 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.

GPT has a special types for rootfs. I think that should be used for the
root partitions.

Michael

> 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 <rhi@pengutronix.de>
> ---
>  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
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



  reply	other threads:[~2023-10-11  6:58 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-10 19:16 [DistroKit] [PATCH 1/6] v7a: image-stm32mp: use 'partition-table-type' option instead of 'gpt' Roland Hieber
2023-10-10 19:16 ` [DistroKit] [PATCH 2/6] v7a: images: use 'partition-table-type' option instead of 'partition-table' Roland Hieber
2023-10-10 19:16 ` [DistroKit] [PATCH 3/6] v7a: barebox: pass root=mmcblkXpN instead of root=PARTUUID=… to kernel Roland Hieber
2023-10-10 19:16 ` [DistroKit] [PATCH 4/6] v7a: barebox: enable GUID Partition Table support Roland Hieber
2023-10-10 19:16 ` [DistroKit] [PATCH 5/6] images: remove qemu size hack Roland Hieber
2023-10-11  6:51   ` Michael Olbrich
2023-10-11  9:40     ` Roland Hieber
2023-10-11  9:45       ` Roland Hieber
2023-10-11 10:03         ` Roland Hieber
2023-10-10 19:16 ` [DistroKit] [PATCH 6/6] images: convert to GPT format Roland Hieber
2023-10-11  6:58   ` Michael Olbrich [this message]
2023-10-11  9:34     ` Roland Hieber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZSZHl8ENEI/TY4Iq@pengutronix.de \
    --to=m.olbrich@pengutronix.de \
    --cc=distrokit@pengutronix.de \
    --cc=rhi@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox