Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
On Mon, Oct 19, 2015 at 04:59:28PM +0200, Patrick Delaunay wrote: > 2015-10-15 23:46 GMT+02:00 Tom Rini: > > > On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote: > > > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay > > > wrote: > > > > code under flag CONFIG_PARTITION_TYPE_GUID > > > > add parameter guid to select partition type guid > > > > > > > > example of use with gpt command : > > > > > > > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400, > > > > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7, > > > > size=0x7538ba00,uuid=${uuid_gpt_root}, > > > > guid=0fc63daf-8483-4772-8e79-3d69d8477de4; > > > > > > The mixture of UUID and GUID is confusing. What we want are the > > > GUIDs/UUIDs for unique ID and the partition type. I would just call > > > the partition type "type". This would allow the same format to be used > > > for MBR partitions if someone wanted to do support for that. > > > > ... and if someone wants to add MBR support, there's enough use cases > > for it (mainly around flashing/factory stuff) that I wouldn't object. > > So yes, lets do this with that kind of thing in mind. > > > > > Hi, > > if you prefer, I can modify the parameter name to "type" as proposed in a > version 2 of the patchset. > > partitions = > uuid_disk=${uuid_gpt_disk}; \ > name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \ > > name=root,start=0x7,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4; > > and to be coherent, I will also modify the field in the struct > disk_partition_t to type_guid > > +#ifdef CONFIG_PARTITION_TYPE_GUID > +chartype_guid[37];/* type GUID as string, if exists*/ > +#endif > } disk_partition_t; Sounds like a plan, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
2015-10-15 23:46 GMT+02:00 Tom Rini: > On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote: > > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay > > wrote: > > > code under flag CONFIG_PARTITION_TYPE_GUID > > > add parameter guid to select partition type guid > > > > > > example of use with gpt command : > > > > > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400, > > > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7, > > > size=0x7538ba00,uuid=${uuid_gpt_root}, > > > guid=0fc63daf-8483-4772-8e79-3d69d8477de4; > > > > The mixture of UUID and GUID is confusing. What we want are the > > GUIDs/UUIDs for unique ID and the partition type. I would just call > > the partition type "type". This would allow the same format to be used > > for MBR partitions if someone wanted to do support for that. > > ... and if someone wants to add MBR support, there's enough use cases > for it (mainly around flashing/factory stuff) that I wouldn't object. > So yes, lets do this with that kind of thing in mind. > Hi, if you prefer, I can modify the parameter name to "type" as proposed in a version 2 of the patchset. partitions = uuid_disk=${uuid_gpt_disk}; \ name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \ name=root,start=0x7,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4; and to be coherent, I will also modify the field in the struct disk_partition_t to type_guid +#ifdef CONFIG_PARTITION_TYPE_GUID +chartype_guid[37];/* type GUID as string, if exists*/ +#endif } disk_partition_t; Patrick ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote: > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay >wrote: > > code under flag CONFIG_PARTITION_TYPE_GUID > > add parameter guid to select partition type guid > > > > example of use with gpt command : > > > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400, > > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7, > > size=0x7538ba00,uuid=${uuid_gpt_root}, > > guid=0fc63daf-8483-4772-8e79-3d69d8477de4; > > The mixture of UUID and GUID is confusing. What we want are the > GUIDs/UUIDs for unique ID and the partition type. I would just call > the partition type "type". This would allow the same format to be used > for MBR partitions if someone wanted to do support for that. ... and if someone wants to add MBR support, there's enough use cases for it (mainly around flashing/factory stuff) that I wouldn't object. So yes, lets do this with that kind of thing in mind. -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunaywrote: > code under flag CONFIG_PARTITION_TYPE_GUID > add parameter guid to select partition type guid > > example of use with gpt command : > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400, > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7, > size=0x7538ba00,uuid=${uuid_gpt_root}, > guid=0fc63daf-8483-4772-8e79-3d69d8477de4; The mixture of UUID and GUID is confusing. What we want are the GUIDs/UUIDs for unique ID and the partition type. I would just call the partition type "type". This would allow the same format to be used for MBR partitions if someone wanted to do support for that. Rob > > gpt write mmc 0 $partitions > > Signed-off-by: Patrick Delaunay > --- > > common/cmd_gpt.c | 17 + > disk/part.c | 9 + > disk/part_efi.c | 25 + > include/part.h | 3 +++ > 4 files changed, 54 insertions(+) > > diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c > index c56fe15..1e8f927 100644 > --- a/common/cmd_gpt.c > +++ b/common/cmd_gpt.c > @@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc, > strcpy((char *)parts[i].uuid, p); > free(val); > } > +#ifdef CONFIG_PARTITION_TYPE_GUID > +/* guid */ > +val = extract_val(tok, "guid"); > +if (val) { > +/* 'guid' is optional */ > +if (extract_env(val, )) > +p = val; > +if (strlen(p) >= sizeof(parts[i].guid)) { > +printf("Wrong guid format for partition %d\n", > + i); > +errno = -4; > +goto err; > +} > +strcpy((char *)parts[i].guid, p); > +free(val); > +} > +#endif > /* name */ > val = extract_val(tok, "name"); > if (!val) { /* name is mandatory */ > diff --git a/disk/part.c b/disk/part.c > index 43485c9..316454d 100644 > --- a/disk/part.c > +++ b/disk/part.c > @@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int > part, > /* The common case is no UUID support */ > info->uuid[0] = 0; > #endif > +#ifdef CONFIG_PARTITION_TYPE_GUIDS > +info->guid[0] = 0; > +#endif > > switch (dev_desc->part_type) { > #ifdef CONFIG_MAC_PARTITION > @@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const > char *dev_part_str, > #ifdef CONFIG_PARTITION_UUIDS > info->uuid[0] = 0; > #endif > +#ifdef CONFIG_PARTITION_TYPE_GUIDS > +info->guid[0] = 0; > +#endif > > return 0; > } > @@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const > char *dev_part_str, > #ifdef CONFIG_PARTITION_UUIDS > info->uuid[0] = 0; > #endif > +#ifdef CONFIG_PARTITION_TYPE_GUIDS > +info->guid[0] = 0; > +#endif > > ret = 0; > goto cleanup; > diff --git a/disk/part_efi.c b/disk/part_efi.c > index 15627f2..25bf8f9 100644 > --- a/disk/part_efi.c > +++ b/disk/part_efi.c > @@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, > int part, > uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid, > UUID_STR_FORMAT_GUID); > #endif > +#ifdef CONFIG_PARTITION_TYPE_GUID > +uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid, > +UUID_STR_FORMAT_GUID); > +#endif > > debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__, >info->start, info->size, info->name); > @@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e, > char *str_uuid; > unsigned char *bin_uuid; > #endif > +#ifdef CONFIG_PARTITION_TYPE_GUID > +char *str_guid; > +unsigned char *bin_guid; > +#endif > > for (i = 0; i < parts; i++) { > /* partition starting lba */ > @@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e, > else > gpt_e[i].ending_lba = cpu_to_le64(offset - 1); > > +#ifdef CONFIG_PARTITION_TYPE_GUID > +str_guid = partitions[i].guid; > +bin_guid = gpt_e[i].partition_type_guid.b; > +if (strlen(str_guid)) { > +if (uuid_str_to_bin(str_guid, bin_guid, > +UUID_STR_FORMAT_GUID)) { > +printf("Partition no. %d: invalid type guid: %s\n", > + i, str_guid); > +return -1; > +} > +} else { > +/* default partition type GUID */ > +memcpy(bin_guid, > + _BASIC_DATA_GUID, 16); > +} > +#else > /* partition type GUID */ > memcpy(gpt_e[i].partition_type_guid.b, > _BASIC_DATA_GUID, 16); > +#endif > > #ifdef CONFIG_PARTITION_UUIDS > str_uuid = partitions[i].uuid; > diff --git a/include/part.h b/include/part.h > index 8ea9b30..d57d284
[U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
code under flag CONFIG_PARTITION_TYPE_GUID add parameter guid to select partition type guid example of use with gpt command : partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400, size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7, size=0x7538ba00,uuid=${uuid_gpt_root}, guid=0fc63daf-8483-4772-8e79-3d69d8477de4; gpt write mmc 0 $partitions Signed-off-by: Patrick Delaunay--- common/cmd_gpt.c | 17 + disk/part.c | 9 + disk/part_efi.c | 25 + include/part.h | 3 +++ 4 files changed, 54 insertions(+) diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index c56fe15..1e8f927 100644 --- a/common/cmd_gpt.c +++ b/common/cmd_gpt.c @@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc, strcpy((char *)parts[i].uuid, p); free(val); } +#ifdef CONFIG_PARTITION_TYPE_GUID +/* guid */ +val = extract_val(tok, "guid"); +if (val) { +/* 'guid' is optional */ +if (extract_env(val, )) +p = val; +if (strlen(p) >= sizeof(parts[i].guid)) { +printf("Wrong guid format for partition %d\n", + i); +errno = -4; +goto err; +} +strcpy((char *)parts[i].guid, p); +free(val); +} +#endif /* name */ val = extract_val(tok, "name"); if (!val) { /* name is mandatory */ diff --git a/disk/part.c b/disk/part.c index 43485c9..316454d 100644 --- a/disk/part.c +++ b/disk/part.c @@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int part, /* The common case is no UUID support */ info->uuid[0] = 0; #endif +#ifdef CONFIG_PARTITION_TYPE_GUIDS +info->guid[0] = 0; +#endif switch (dev_desc->part_type) { #ifdef CONFIG_MAC_PARTITION @@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str, #ifdef CONFIG_PARTITION_UUIDS info->uuid[0] = 0; #endif +#ifdef CONFIG_PARTITION_TYPE_GUIDS +info->guid[0] = 0; +#endif return 0; } @@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str, #ifdef CONFIG_PARTITION_UUIDS info->uuid[0] = 0; #endif +#ifdef CONFIG_PARTITION_TYPE_GUIDS +info->guid[0] = 0; +#endif ret = 0; goto cleanup; diff --git a/disk/part_efi.c b/disk/part_efi.c index 15627f2..25bf8f9 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part, uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid, UUID_STR_FORMAT_GUID); #endif +#ifdef CONFIG_PARTITION_TYPE_GUID +uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid, +UUID_STR_FORMAT_GUID); +#endif debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__, info->start, info->size, info->name); @@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e, char *str_uuid; unsigned char *bin_uuid; #endif +#ifdef CONFIG_PARTITION_TYPE_GUID +char *str_guid; +unsigned char *bin_guid; +#endif for (i = 0; i < parts; i++) { /* partition starting lba */ @@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e, else gpt_e[i].ending_lba = cpu_to_le64(offset - 1); +#ifdef CONFIG_PARTITION_TYPE_GUID +str_guid = partitions[i].guid; +bin_guid = gpt_e[i].partition_type_guid.b; +if (strlen(str_guid)) { +if (uuid_str_to_bin(str_guid, bin_guid, +UUID_STR_FORMAT_GUID)) { +printf("Partition no. %d: invalid type guid: %s\n", + i, str_guid); +return -1; +} +} else { +/* default partition type GUID */ +memcpy(bin_guid, + _BASIC_DATA_GUID, 16); +} +#else /* partition type GUID */ memcpy(gpt_e[i].partition_type_guid.b, _BASIC_DATA_GUID, 16); +#endif #ifdef CONFIG_PARTITION_UUIDS str_uuid = partitions[i].uuid; diff --git a/include/part.h b/include/part.h index 8ea9b30..d57d284 100644 --- a/include/part.h +++ b/include/part.h @@ -93,6 +93,9 @@ typedef struct disk_partition { #ifdef CONFIG_PARTITION_UUIDS charuuid[37];/* filesystem UUID as string, if exists*/ #endif +#ifdef CONFIG_PARTITION_TYPE_GUID +charguid[37];/* type GUID as string, if exists*/ +#endif } disk_partition_t; /* Misc _get_dev functions */ -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot