From: Stephen Warren <swar...@nvidia.com> This implements the following:
partuuid mmc 0:1 -> prints the partition's UUID. partuuic mmc 0:1 uuid -> sets environment variable "uuid" to the partition's UUID. This can be useful when writing a bootcmd which searches all known devices for something bootable, and then wants the kernel to use the same partition as the root device, e.g.: partuuid ${devtype} ${devnum}:${rootpart} uuid setenv bootargs root=PARTUUID=${uuid} ... Signed-off-by: Stephen Warren <swar...@nvidia.com> --- common/Makefile | 1 + common/cmd_partuuid.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 0 deletions(-) create mode 100644 common/cmd_partuuid.c diff --git a/common/Makefile b/common/Makefile index 483eb4d..bc39997 100644 --- a/common/Makefile +++ b/common/Makefile @@ -129,6 +129,7 @@ COBJS-$(CONFIG_CMD_NAND) += cmd_nand.o COBJS-$(CONFIG_CMD_NET) += cmd_net.o COBJS-$(CONFIG_CMD_ONENAND) += cmd_onenand.o COBJS-$(CONFIG_CMD_OTP) += cmd_otp.o +COBJS-$(CONFIG_CMD_PARTUUID) += cmd_partuuid.o ifdef CONFIG_PCI COBJS-$(CONFIG_CMD_PCI) += cmd_pci.o endif diff --git a/common/cmd_partuuid.c b/common/cmd_partuuid.c new file mode 100644 index 0000000..c85606c --- /dev/null +++ b/common/cmd_partuuid.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. + * + * made from cmd_ext2, which was: + * + * (C) Copyright 2004 + * esd gmbh <www.esd-electronics.com> + * Reinhard Arlt <reinhard.a...@esd-electronics.com> + * + * made from cmd_reiserfs by + * + * (C) Copyright 2003 - 2004 + * Sysgo Real-Time Solutions, AG <www.elinos.com> + * Pavel Bartusek <p...@sysgo.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <common.h> +#include <config.h> +#include <command.h> +#include <part.h> +#include <vsprintf.h> + +int do_partuuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + int dev; + int part; + char *ep; + block_dev_desc_t *dev_desc; + disk_partition_t info; + + if (argc < 3) + return CMD_RET_USAGE; + + dev = (int)simple_strtoul(argv[2], &ep, 16); + dev_desc = get_dev(argv[1], dev); + if (dev_desc == NULL) { + printf("Block device %s %d not supported\n", argv[1], dev); + return 1; + } + + if (*ep) { + if (*ep != ':') { + puts("Invalid device; use dev[:part]\n"); + return 1; + } + part = (int)simple_strtoul(++ep, NULL, 16); + } else { + part = 1; + } + + if (get_partition_info(dev_desc, part, &info)) { + printf("Bad partition %d\n", part); + return 1; + } + + if (argc > 3) + setenv(argv[3], info.uuid); + else + printf("%s\n", info.uuid); + + return 0; +} + +U_BOOT_CMD( + partuuid, 4, 1, do_partuuid, + "partition UUID retrieval", + "<interface> <dev[:part]>\n" + " - show filesystem UUID of specified partition" + "<interface> <dev[:part]> <varname>\n" + " - write filesystem UUID to environmane variable" +); -- 1.7.0.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot