[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3] probe: Support probing for GPT partition UUID with -q
From: |
Jacob Kroon |
Subject: |
[PATCH v3] probe: Support probing for GPT partition UUID with -q |
Date: |
Fri, 10 May 2019 14:05:02 +0200 |
Linux supports root=PARTUUID=<partuuid> boot argument, so add
support for probing it. Compared to the fs UUID, the partition
UUID does not change when reformatting a partition.
Signed-off-by: Jacob Kroon <address@hidden>
---
grub-core/commands/probe.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
Changes since v2:
* Add a proper commit message
* Handle endianess in the same way as is currently done in
util/grub-probe.c:print_gpt_guid ()
diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c
index 95d272287..24742c181 100644
--- a/grub-core/commands/probe.c
+++ b/grub-core/commands/probe.c
@@ -24,6 +24,7 @@
#include <grub/device.h>
#include <grub/disk.h>
#include <grub/partition.h>
+#include <grub/gpt_partition.h>
#include <grub/net.h>
#include <grub/fs.h>
#include <grub/file.h>
@@ -45,6 +46,7 @@ static const struct grub_arg_option options[] =
{"fs", 'f', 0, N_("Determine filesystem type."), 0, 0},
{"fs-uuid", 'u', 0, N_("Determine filesystem UUID."), 0, 0},
{"label", 'l', 0, N_("Determine filesystem label."), 0, 0},
+ {"partuuid", 'q', 0, N_("Determine GPT partition uuid."), 0, 0},
{0, 0, 0, 0, 0, 0}
};
@@ -98,6 +100,39 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char
**args)
grub_device_close (dev);
return GRUB_ERR_NONE;
}
+ if (state[6].set)
+ {
+ /* AAAABBBB-CCCC-DDDD-EEEE-FFFFFFFFFFFF + null terminator */
+ char val[37] = "none";
+ if (dev->disk && dev->disk->partition &&
+ grub_strcmp(dev->disk->partition->partmap->name, "gpt") == 0)
+ {
+ struct grub_gpt_partentry entry;
+ struct grub_partition *p = dev->disk->partition;
+ grub_disk_t disk = grub_disk_open(dev->disk->name);
+ if (!disk)
+ return grub_errno;
+ if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry))
+ return grub_errno;
+ grub_disk_close(disk);
+ grub_gpt_part_guid_t *guid = &entry.guid;
+ guid->data1 = grub_le_to_cpu32 (guid->data1);
+ guid->data2 = grub_le_to_cpu16 (guid->data2);
+ guid->data3 = grub_le_to_cpu16 (guid->data3);
+ grub_snprintf (val, sizeof(val),
+ "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ guid->data1, guid->data2, guid->data3, guid->data4[0],
+ guid->data4[1], guid->data4[2], guid->data4[3],
+ guid->data4[4], guid->data4[5], guid->data4[6],
+ guid->data4[7]);
+ }
+ if (state[0].set)
+ grub_env_set (state[0].arg, val);
+ else
+ grub_printf ("%s", val);
+ grub_device_close (dev);
+ return GRUB_ERR_NONE;
+ }
fs = grub_fs_probe (dev);
if (! fs)
return grub_errno;
--
2.20.1
- [PATCH v3] probe: Support probing for GPT partition UUID with -q,
Jacob Kroon <=