From: Roland Hieber <rhi@pengutronix.de>
To: distrokit@pengutronix.de
Subject: Re: [DistroKit] [PATCH 6/6] images: convert to GPT format
Date: Wed, 11 Oct 2023 11:34:03 +0200 [thread overview]
Message-ID: <20231011093403.wc4xkz6ocdxbuyzp@pengutronix.de> (raw)
In-Reply-To: <ZSZHl8ENEI/TY4Iq@pengutronix.de>
On Wed, Oct 11, 2023 at 08:58:31AM +0200, Michael Olbrich wrote:
> 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.
Yes, but until yesterday [1], there wasn't a GUID for big-endian MIPS,
so I opted for the default 'linux-generic' instead. Will update this in
v2.
[1]: https://github.com/uapi-group/specifications/pull/86
- Roland
>
> 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 |
>
--
Roland Hieber, Pengutronix e.K. | r.hieber@pengutronix.de |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
prev parent reply other threads:[~2023-10-11 9:34 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
2023-10-11 9:34 ` Roland Hieber [this message]
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=20231011093403.wc4xkz6ocdxbuyzp@pengutronix.de \
--to=rhi@pengutronix.de \
--cc=distrokit@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