[PATCH 2/3] cmd: fix gpt enumerate
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sat Aug 26 17:33:54 CEST 2023
On 8/26/23 04:04, Simon Glass wrote:
> Hi Heinrich,
>
> On Fri, 25 Aug 2023 at 19:53, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> Do not assume that partitions are numbered continuously starting at 1.
>>
>> Only a single partition table type can exist on a block device. If we found
>> a GPT partition table, we must not re-enumerate with the MBR partition
>> driver which would find the protective partition.
>
> Does it really? My understand is that it sets desc->part_type and it
> stays like that from then on?
Prior to my patch with printf statements added:
=> gpt enumerate host 0
enumeration by driver EFI
partition 'EFI system partition'
enumeration by driver AMIGA
enumeration by driver DOS
partition 'xxa1'
enumeration by driver ISO
enumeration by driver MAC
setenv gpt_partition_list EFI system partition xxa1
success!
Of course the value of $gpt_partition_list is useless because you do not
even know how many partitions were discovered 'EFI', 'system',
'partition' could be the names of three different partitions or there
could be one partition 'EFI system partition'.
I wonder how Broadcom can use this in their update scripts. See
12fc1f3bb223 ("cmd: gpt: add eMMC and GPT support").
For something usable we would have to add quotations marks, escape
quotation marks in the string, and the do-for command would need to
support a string with quotation marks like
"'Heinrich\'s partition one' 'EFI system partition'"
The "xxa1" string is generated in part_set_generic_name() because MBR
partitions don't have a name.
xx = other block device type
a = device number 0
1 = partition number 0
Best regards
Heinrich
>
>>
>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>> ---
>> cmd/gpt.c | 14 ++++++++------
>> 1 file changed, 8 insertions(+), 6 deletions(-)
>>
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
>
>
>> diff --git a/cmd/gpt.c b/cmd/gpt.c
>> index d0e165d539..99ca0a6163 100644
>> --- a/cmd/gpt.c
>> +++ b/cmd/gpt.c
>> @@ -691,12 +691,13 @@ static int gpt_enumerate(struct blk_desc *desc)
>> int ret;
>> int i;
>>
>> + if (part_drv->test(desc))
>> + continue;
>> +
>> for (i = 1; i < part_drv->max_entries; i++) {
>> ret = part_drv->get_info(desc, i, &pinfo);
>> - if (ret) {
>> - /* no more entries in table */
>> - break;
>> - }
>> + if (ret)
>> + continue;
>>
>> ptr = &part_list[str_len];
>> tmp_len = strlen((const char *)pinfo.name);
>> @@ -711,9 +712,10 @@ static int gpt_enumerate(struct blk_desc *desc)
>> /* One byte for space(" ") delimiter */
>> ptr[tmp_len] = ' ';
>> }
>> + if (*part_list)
>> + part_list[strlen(part_list) - 1] = 0;
>> + break;
>> }
>> - if (*part_list)
>> - part_list[strlen(part_list) - 1] = 0;
>> debug("setenv gpt_partition_list %s\n", part_list);
>>
>> return env_set("gpt_partition_list", part_list);
>> --
>> 2.40.1
>>
More information about the U-Boot
mailing list