[U-Boot] GUID/UUID string representation
Przemyslaw Marczak
p.marczak at samsung.com
Fri Jul 31 13:31:16 CEST 2015
Hello,
On 07/30/2015 01:19 PM, Palacios, Hector wrote:
> Hello,
>
> Commit d718ded056eefb6239bd2e0a57b7f6d99c6e9e4b introduced translation of UUID binary
> data to GUID string representation.
>
> So, for example, if I use the 'gpt' command to create a partition table and pass a
> 'uuid' parameter like this:
> => gpt write mmc 0
> "uuid_disk=${uuid_disk};start=2MiB,name=linux,size=64MiB,uuid=43f1961b-ce4c-4e6c-8f22-2230c5d532bd;"
>
> As a result, when I print the partition table I get:
> => part list mmc 0
>
> Partition Map for MMC device 0 -- Partition Type: EFI
>
> Part Start LBA End LBA Name
> Attributes
> Type GUID
> Partition GUID
> 1 0x00001000 0x00020fff "linux"
> attrs: 0x0000000000000000
> type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
> guid: 1b96f143-4cce-6c4e-8f22-2230c5d532bd
>
> which prints the GUID string representation of my supplied UUID (with endian change on
> the first three parts).
>
> The command 'part uuid' (despite its name) returns this same GUID representation:
> => part uuid mmc 0
> 1b96f143-4cce-6c4e-8f22-2230c5d532bd
>
> I have some questions:
> - Why is preferred the GUID representation when listing the partition table?
Because it's defined by the specification and is the same as in the
kernel. Please look at Apendix A of UEFI specification[1], which says
about GUID text representation, which is simply shown in the table.
The binary format of guid is consistent with RFC4122[2], which says that
both guid and uuid are binary equal, but different represented by text.
[1]: http://www.uefi.org/sites/default/files/resources/UEFI%202_5.pdf
[2]: https://www.ietf.org/rfc/rfc4122.txt
You can check it by printing gpt with:
'mmc part' - let's store the guids somewhere
Then mount the same disk in linux, and next do:
'ls -lhgG /dev/disk/by-partuuid/'
You can see, that even if the name is 'by-partuuid', the ids are
displayed as GUIDs. Probably there is a bug with the path name, since
uuid is a reserved name for "universally unique identifier".
> - Should the 'part uuid' return the UUID representation instead of the GUID?
It returns a string representation of partition id, which is GUID text
format.
> - Should there be a 'part uuid' and a 'part guid' commands that return the different
> representations?
I don't think so, because there is only one text format in the standard.
> - Isn't it a bit inconsistent that the 'gpt' command reads the 'uuid' parameter in
> UUID string representation and the 'part uuid' and 'part list' represent the number in
> GUID?
You're right. This is inconsistent for string comparison - we can't just
compare the UUID string with GUID, even if the 16 bytes binary buffer is
the same. I don't know why GPT support was introduced with uuid names,
we have a functions to convert it in lib/uuid.c, so additional command
could be added - but I think cleanup is better.
>
> It may all sound as a futile discussion but in v2013.04 I had some variables to store
> the UUID numbers for my partitions that I used to generate the partition table, and
> then compared these variables with the values returned by 'part uuid' (as strings).
> Now on v2015.04 the strings do not match due to this endianness change on the
> representation.
>
> Thanks
> --
> Hector
>
Thank you for pointing this issue.
After looking into the code, I found a bug in function
gpt_fill_header(), which converts string to GUID, but it shouldn't,
since we pass UUID's to gpt command.
So what can we do to fix this inconsistency:
- change the variable uuid_* to guid_* in the $partitions. This is a
string representation compatible with specification.
- update str_format argument to UUID_STR_GUID in gen_rand_uuid_str()
calls in gpt command.
Update uuid format argument in uuid_str_to_bin() calls:
- update UUID_STR_FORMAT_STD to FORMAT_GUID in gpt_fill_pte()
- leave UUID_STR_FORMAT_GUID in gpt_fill_header() - it is bug when UUID
is generated in gpt command.
Stephen, is that good for you?
Best regards,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
More information about the U-Boot
mailing list