Message ID | 1445429689-26361-2-git-send-email-patrick.delaunay73@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Tom Rini |
Headers | show |
Hi Patrick, On 21 October 2015 at 06:14, Patrick Delaunay <patrick.delaunay73@gmail.com> wrote: > code under flag CONFIG_PARTITION_TYPE_GUID > add parameter "type" to select partition type guid > > example of use with gpt command : > > partitions = uuid_disk=${uuid_gpt_disk}; \ > name=boot,size=0x6bc00,uuid=${uuid_gpt_boot}; \ > name=root,size=0x7538ba00,uuid=${uuid_gpt_root}, \ > type=0fc63daf-8483-4772-8e79-3d69d8477de4; > > gpt write mmc 0 $partitions > > Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com> > --- > > Changes in v2: > - change guid to type in gpt command parameter > - change guid to type_guid in disk_partition_t > - remove 'S' at the end of some flag CONFIG_PARTITION_TYPE_GUID > > common/cmd_gpt.c | 17 +++++++++++++++++ > disk/part.c | 9 +++++++++ > disk/part_efi.c | 25 +++++++++++++++++++++++++ > include/part.h | 3 +++ > 4 files changed, 54 insertions(+) Can you add some documentation somewhere for these patches? Regards, Simon
On Wed, Oct 21, 2015 at 02:14:48PM +0200, Patrick Delaunay wrote: > code under flag CONFIG_PARTITION_TYPE_GUID > add parameter "type" to select partition type guid > > example of use with gpt command : > > partitions = uuid_disk=${uuid_gpt_disk}; \ > name=boot,size=0x6bc00,uuid=${uuid_gpt_boot}; \ > name=root,size=0x7538ba00,uuid=${uuid_gpt_root}, \ > type=0fc63daf-8483-4772-8e79-3d69d8477de4; > > gpt write mmc 0 $partitions > > Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com> Reviewed-by: Tom Rini <trini@konsulko.com> But I want to echo Simon's comment that we should update the docs a bit, perhaps a few more words and an example in doc/README.gpt.
Hi, Ok. I will provided documentation update in version 3. Patrick Le 23 oct. 2015 6:52 PM, "Tom Rini" <trini@konsulko.com> a écrit : > On Wed, Oct 21, 2015 at 02:14:48PM +0200, Patrick Delaunay wrote: > > > code under flag CONFIG_PARTITION_TYPE_GUID > > add parameter "type" to select partition type guid > > > > example of use with gpt command : > > > > partitions = uuid_disk=${uuid_gpt_disk}; \ > > name=boot,size=0x6bc00,uuid=${uuid_gpt_boot}; \ > > name=root,size=0x7538ba00,uuid=${uuid_gpt_root}, \ > > type=0fc63daf-8483-4772-8e79-3d69d8477de4; > > > > gpt write mmc 0 $partitions > > > > Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com> > > Reviewed-by: Tom Rini <trini@konsulko.com> > > But I want to echo Simon's comment that we should update the docs a bit, > perhaps a few more words and an example in doc/README.gpt. > > -- > Tom >
diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index c56fe15..e3c0297 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, "type"); + if (val) { + /* 'type' is optional */ + if (extract_env(val, &p)) + p = val; + if (strlen(p) >= sizeof(parts[i].type_guid)) { + printf("Wrong type guid format for partition %d\n", + i); + errno = -4; + goto err; + } + strcpy((char *)parts[i].type_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..a47ec8c 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_GUID + info->type_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_GUID + info->type_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_GUID + info->type_guid[0] = 0; +#endif ret = 0; goto cleanup; diff --git a/disk/part_efi.c b/disk/part_efi.c index 15627f2..c124143 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->type_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_type_guid; + unsigned char *bin_type_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_type_guid = partitions[i].type_guid; + bin_type_guid = gpt_e[i].partition_type_guid.b; + if (strlen(str_type_guid)) { + if (uuid_str_to_bin(str_type_guid, bin_type_guid, + UUID_STR_FORMAT_GUID)) { + printf("Partition no. %d: invalid type guid: %s\n", + i, str_type_guid); + return -1; + } + } else { + /* default partition type GUID */ + memcpy(bin_type_guid, + &PARTITION_BASIC_DATA_GUID, 16); + } +#else /* partition type GUID */ memcpy(gpt_e[i].partition_type_guid.b, &PARTITION_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..8b5ac12 100644 --- a/include/part.h +++ b/include/part.h @@ -93,6 +93,9 @@ typedef struct disk_partition { #ifdef CONFIG_PARTITION_UUIDS char uuid[37]; /* filesystem UUID as string, if exists */ #endif +#ifdef CONFIG_PARTITION_TYPE_GUID + char type_guid[37]; /* type GUID as string, if exists */ +#endif } disk_partition_t; /* Misc _get_dev functions */
code under flag CONFIG_PARTITION_TYPE_GUID add parameter "type" to select partition type guid example of use with gpt command : partitions = uuid_disk=${uuid_gpt_disk}; \ name=boot,size=0x6bc00,uuid=${uuid_gpt_boot}; \ name=root,size=0x7538ba00,uuid=${uuid_gpt_root}, \ type=0fc63daf-8483-4772-8e79-3d69d8477de4; gpt write mmc 0 $partitions Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com> --- Changes in v2: - change guid to type in gpt command parameter - change guid to type_guid in disk_partition_t - remove 'S' at the end of some flag CONFIG_PARTITION_TYPE_GUID common/cmd_gpt.c | 17 +++++++++++++++++ disk/part.c | 9 +++++++++ disk/part_efi.c | 25 +++++++++++++++++++++++++ include/part.h | 3 +++ 4 files changed, 54 insertions(+)