On 09/05/2012 05:03 PM, Stephen Warren wrote: > From: Stephen Warren <swar...@nvidia.com> > > This implements the following: > > part uuid mmc 0:1 > -> print partition UUID > part uuid mmc 0:1 uuid > -> set environment variable to partition UUID
What's the reason to not always both print out and set the uuid env var? Perhaps the env name should be partuuid or part_uuid as you could have uuid's for other purposes? > > 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.: > > part uuid ${devtype} ${devnum}:${rootpart} uuid > setenv bootargs root=PARTUUID=${uuid} ... > > It is expected that further part sub-commands will be added later, e.g. > to find which partition on a disk is marked bootable, to write new > partition tables to disk, etc. A list command would be useful and would be better located here than under scsi or other interface commands. Perhaps instead of printing a single part uuid, you should make a list command that prints all partitions and their UUIDs. That would address my first question. Rob > > Signed-off-by: Stephen Warren <swar...@nvidia.com> > --- > v2: validate that CONFIG_PARTITION_UUID is defined when CONFIG_CMD_PART is > > Note: If Rob Herring's proposed patch "disk/part: introduce > get_device_and_partition" is applied, the body of do_partuuid() should > be reworked to use Rob's new function get_device_and_partition(). > --- > common/Makefile | 1 + > common/cmd_part.c | 104 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 105 insertions(+), 0 deletions(-) > create mode 100644 common/cmd_part.c > > diff --git a/common/Makefile b/common/Makefile > index 3d62775..449b390 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_PART) += cmd_part.o > ifdef CONFIG_PCI > COBJS-$(CONFIG_CMD_PCI) += cmd_pci.o > endif > diff --git a/common/cmd_part.c b/common/cmd_part.c > new file mode 100644 > index 0000000..1b15ae9 > --- /dev/null > +++ b/common/cmd_part.c > @@ -0,0 +1,104 @@ > +/* > + * 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> > + > +#ifndef CONFIG_PARTITION_UUIDS > +#error CONFIG_PARTITION_UUIDS must be enabled for CONFIG_CMD_PART to be > enabled > +#endif > + > +int do_partuuid(int argc, char * const argv[]) > +{ > + int dev; > + int part; > + char *ep; > + block_dev_desc_t *dev_desc; > + disk_partition_t info; > + > + if (argc < 2) > + return CMD_RET_USAGE; > + if (argc > 3) > + return CMD_RET_USAGE; > + > + dev = (int)simple_strtoul(argv[1], &ep, 16); > + dev_desc = get_dev(argv[0], dev); > + if (dev_desc == NULL) { > + printf("Block device %s %d not supported\n", argv[0], 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 > 2) > + setenv(argv[2], info.uuid); > + else > + printf("%s\n", info.uuid); > + > + return 0; > +} > + > +int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > +{ > + if (argc < 2) > + return CMD_RET_USAGE; > + > + if (!strcmp(argv[1], "uuid")) > + return do_partuuid(argc - 2, argv + 2); > + > + return CMD_RET_USAGE; > +} > + > +U_BOOT_CMD( > + part, 5, 1, do_part, > + "disk partition related commands", > + "part uuid <interface> <dev[:part]>\n" > + " - print partition UUID\n" > + "part uuid <interface> <dev[:part]> <varname>\n" > + " - set environment variable to partition UUID" > +); > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot