mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
gpt: support random UUIDs without setting environment variables
Currently, an environment variable must be used to store the randomly generated UUID for each partition. This is not necessary, so make storing the UUID optional. Now passing uuid_disk and uuid are optional when random UUIDs are enabled. Signed-off-by: Rob Herring <robh@kernel.org> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
This commit is contained in:
parent
a150e6c9df
commit
0c7e8d1317
2 changed files with 35 additions and 21 deletions
|
@ -154,17 +154,24 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
|
|||
|
||||
/* extract disk guid */
|
||||
s = str;
|
||||
tok = strsep(&s, ";");
|
||||
val = extract_val(tok, "uuid_disk");
|
||||
val = extract_val(str, "uuid_disk");
|
||||
if (!val) {
|
||||
#ifdef CONFIG_RANDOM_UUID
|
||||
*str_disk_guid = malloc(UUID_STR_LEN + 1);
|
||||
gen_rand_uuid_str(*str_disk_guid, UUID_STR_FORMAT_STD);
|
||||
#else
|
||||
free(str);
|
||||
return -2;
|
||||
#endif
|
||||
} else {
|
||||
val = strsep(&val, ";");
|
||||
if (extract_env(val, &p))
|
||||
p = val;
|
||||
*str_disk_guid = strdup(p);
|
||||
free(val);
|
||||
/* Move s to first partition */
|
||||
strsep(&s, ";");
|
||||
}
|
||||
if (extract_env(val, &p))
|
||||
p = val;
|
||||
*str_disk_guid = strdup(p);
|
||||
free(val);
|
||||
|
||||
if (strlen(s) == 0)
|
||||
return -3;
|
||||
|
||||
|
@ -192,20 +199,25 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
|
|||
|
||||
/* uuid */
|
||||
val = extract_val(tok, "uuid");
|
||||
if (!val) { /* 'uuid' is mandatory */
|
||||
if (!val) {
|
||||
/* 'uuid' is optional if random uuid's are enabled */
|
||||
#ifdef CONFIG_RANDOM_UUID
|
||||
gen_rand_uuid_str(parts[i].uuid, UUID_STR_FORMAT_STD);
|
||||
#else
|
||||
errno = -4;
|
||||
goto err;
|
||||
#endif
|
||||
} else {
|
||||
if (extract_env(val, &p))
|
||||
p = val;
|
||||
if (strlen(p) >= sizeof(parts[i].uuid)) {
|
||||
printf("Wrong uuid format for partition %d\n", i);
|
||||
errno = -4;
|
||||
goto err;
|
||||
}
|
||||
strcpy((char *)parts[i].uuid, p);
|
||||
free(val);
|
||||
}
|
||||
if (extract_env(val, &p))
|
||||
p = val;
|
||||
if (strlen(p) >= sizeof(parts[i].uuid)) {
|
||||
printf("Wrong uuid format for partition %d\n", i);
|
||||
errno = -4;
|
||||
goto err;
|
||||
}
|
||||
strcpy((char *)parts[i].uuid, p);
|
||||
free(val);
|
||||
|
||||
/* name */
|
||||
val = extract_val(tok, "name");
|
||||
if (!val) { /* name is mandatory */
|
||||
|
|
|
@ -157,11 +157,13 @@ To restore GUID partition table one needs to:
|
|||
"partitions=uuid_disk=${uuid_gpt_disk};name=${uboot_name},
|
||||
size=${uboot_size},uuid=${uboot_uuid};"
|
||||
|
||||
Fields 'name', 'size' and 'uuid' are mandatory for every partition.
|
||||
The fields 'name' and 'size' are mandatory for every partition.
|
||||
The field 'start' is optional.
|
||||
|
||||
option: CONFIG_RANDOM_UUID
|
||||
If any partition "UUID" no exists then it is randomly generated.
|
||||
The fields 'uuid' and 'uuid_disk' are optional if CONFIG_RANDOM_UUID is
|
||||
enabled. A random uuid will be used if omitted or they point to an empty/
|
||||
non-existent environment variable. The environment variable will be set to
|
||||
the generated UUID.
|
||||
|
||||
2. Define 'CONFIG_EFI_PARTITION' and 'CONFIG_CMD_GPT'
|
||||
|
||||
|
|
Loading…
Reference in a new issue