[U-Boot] GPT overlap on i.MX6

Jagan Teki jagan at amarulasolutions.com
Thu Nov 28 05:15:10 UTC 2019


Hi Lukasz,

On Wed, Nov 27, 2019 at 9:47 PM Lukasz Majewski <lukma at denx.de> wrote:
>
> Hi Jagan,
>
> > Hi Lukasz,
> >
> > On Wed, Nov 27, 2019 at 4:15 PM Lukasz Majewski <lukma at denx.de> wrote:
> > >
> > > Hi Jagan,
> > >
> > > > Hi,
> > > >
> > > > I have created GPT table start from 8MB for kernel, roots etc.
> > > > something like
> > > >
> > > > Part    Start LBA       End LBA         Name
> > > >         Attributes
> > > >         Type GUID
> > > >         Partition GUID
> > > >   1     0x00004000      0x00023fff      "boota"
> > > >         attrs:  0x0000000000000004
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   c12a7328-f81f-11d2-ba4b-00a0c93ec93b
> > > >   2     0x00024000      0x00043fff      "bootb"
> > > >         attrs:  0x0000000000000004
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   21686148-6449-6e6f-744e-656564454649
> > > >   3     0x00044000      0x00243fff      "rootfsa"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   b921b045-1df0-41c3-af44-4c6f280d3fae
> > > >   4     0x00244000      0x00443fff      "rootfsb"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   8da63339-0007-60c0-c436-083ac8230908
> > > >   5     0x00444000      0x0070bfde      "data"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   4f72ab70-69be-5948-81ff-4fc3daf24faa
> > > >
> > > > I have not included SPL, U-Boot to the partition list since it
> > > > start from 0x400 in i.MX6. So
> > > > I'm writing SPL separately using fastboot(with offset) or ums.
> > > >
> > > > But by doing this, the partition header seems overlapped so the
> > > > output looks
> > > >
> > > > GUID Partition Table Entry Array CRC is wrong: 0x6a1aba0a !=
> > > > 0x8e4fd548 find_valid_gpt: *** ERROR: Invalid GPT ***
> > > > find_valid_gpt: ***        Using Backup GPT ***
> > > > Part    Start LBA       End LBA         Name
> > > >         Attributes
> > > >         Type GUID
> > > >         Partition GUID
> > > >   1     0x00004000      0x00023fff      "boota"
> > > >         attrs:  0x0000000000000004
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   c12a7328-f81f-11d2-ba4b-00a0c93ec93b
> > > >   2     0x00024000      0x00043fff      "bootb"
> > > >         attrs:  0x0000000000000004
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   21686148-6449-6e6f-744e-656564454649
> > > >   3     0x00044000      0x00243fff      "rootfsa"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   b921b045-1df0-41c3-af44-4c6f280d3fae
> > > >   4     0x00244000      0x00443fff      "rootfsb"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   8da63339-0007-60c0-c436-083ac8230908
> > > >   5     0x00444000      0x0070bfde      "data"
> > > >         attrs:  0x0000000000000000
> > > >         type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> > > >         guid:   4f72ab70-69be-5948-81ff-4fc3daf24faa
> > > >
> > > > So, what I understand is If I create the GPT first and then write
> > > > the SPL, the SPL writing process will destroy the GPT Table and
> > > > if I write SPL first and then create GPT, the GPT creation
> > > > process will destroy the SPL.
> > > >
> > > > Is there any way to fix this? I remember we can prevent this
> > > > overlap by preserving GPT Table som other or boot partition
> > > > instead of having them at the beginning by default.
> > > >
> > > > Any inputs?
> > >
> > > On the diagram of GPT description [1] there is the info that
> > > partitions can start from LBA 34 (0x200 * 34) = 0x4400
> > >
> > > From the above it seems like you starts from 0x4000 your boota
> > > partition, which then overwrites the "Entries 5-128" which shall be
> > > 0 and are protected by CRC written in the Primary GPT Header.
> > >
> > > Please try to adjust your partition scheme to start from 0x4400.
> >
> > I still see the overlap. I have created boota at 0x4400 and the write
> > the SPL at 0x400
>              ^^^^^^ - this overwrites the GPT header IMHO.

True, this overlap GPT. and we don't have an option since ROM
expecting the SPL at 0x400.

>
> You may dump the eMMC and check if this is the case (even with u-boot's
> md.l utility)
>
>
> I had similar problem on some Beagle Bone Black (AM33x) board.
>
> The ROM wanted to boot from the fixed eMMC LBA offset which was clashing
> with GPT.
>
> Fortunately, it was also possible to boot from FAT (it was checked
> before the raw offset from eMMC case) partition, so I used this option
> instead.

You mean create FAT partition and copy SPL/U-Boot binaries on the directory?

>
>
> But hey, isn't it possible to store SPL/u-boot to the eMMC's boot (the
> separate HW partition) partition and store GPT to the user accessible
> one (the large one - e.g. 4 GiB)?

Yes, this is what I'm thinking of. But how to preserve the GPT at
another partition or user accessible area than beginning (which is
done by default).


More information about the U-Boot mailing list