| Message ID | 1345158942-31512-2-git-send-email-swarren@wwwdotorg.org |
|---|---|
| State | Superseded |
| Delegated to: | Tom Rini |
| Headers | show |
On 08/16/2012 05:15 PM, Stephen Warren wrote: > 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} ... I guess one thing I might mention here: I can imagine other partition-oriented commands existing, e.g. a command to find the bootable partition on a particular storage device. I'm not sure if we should create a single "part" command with various sub-options for this, e.g.: part uuid mmc 0:1 part get-bootable mmc 0 or create separate commands: partuuid mmc 0:1 part-get-bootable mmc 0
Hi Stephen, > On 08/16/2012 05:15 PM, Stephen Warren wrote: > > 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} ... > > I guess one thing I might mention here: > > I can imagine other partition-oriented commands existing, e.g. a > command to find the bootable partition on a particular storage > device. I'm not sure if we should create a single "part" command with > various sub-options for this, e.g.: > > part uuid mmc 0:1 > part get-bootable mmc 0 > I'm now working at restoring the GPT (GUID Partition Table) at MMC in u-boot. I plan to implement a separate command - gptrestore However, I think that one single command would be more suitable for this purpose. > or create separate commands: > > partuuid mmc 0:1 > part-get-bootable mmc 0
On 08/17/2012 12:46 AM, Lukasz Majewski wrote: > Hi Stephen, > >> On 08/16/2012 05:15 PM, Stephen Warren wrote: >>> 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} ... >> >> I guess one thing I might mention here: >> >> I can imagine other partition-oriented commands existing, e.g. a >> command to find the bootable partition on a particular storage >> device. I'm not sure if we should create a single "part" command with >> various sub-options for this, e.g.: >> >> part uuid mmc 0:1 >> part get-bootable mmc 0 > > I'm now working at restoring the GPT (GUID Partition Table) at MMC in > u-boot. > > I plan to implement a separate command - gptrestore > However, I think that one single command would be more suitable for > this purpose. What will gptrestore do?
On Fri, 17 Aug 2012 09:08:16 -0600 Stephen Warren <swarren@wwwdotorg.org> wrote: > On 08/17/2012 12:46 AM, Lukasz Majewski wrote: > > Hi Stephen, > > > >> On 08/16/2012 05:15 PM, Stephen Warren wrote: > >>> 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} ... > >> > >> I guess one thing I might mention here: > >> > >> I can imagine other partition-oriented commands existing, e.g. a > >> command to find the bootable partition on a particular storage > >> device. I'm not sure if we should create a single "part" command > >> with various sub-options for this, e.g.: > >> > >> part uuid mmc 0:1 > >> part get-bootable mmc 0 > > > > I'm now working at restoring the GPT (GUID Partition Table) at MMC > > in u-boot. > > > > I plan to implement a separate command - gptrestore > > However, I think that one single command would be more suitable for > > this purpose. > > What will gptrestore do? > It will write a GPT table on the eMMC memory. Definitions for partitions are read from u-boot environment variable.
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.arlt@esd-electronics.com> + * + * made from cmd_reiserfs by + * + * (C) Copyright 2003 - 2004 + * Sysgo Real-Time Solutions, AG <www.elinos.com> + * Pavel Bartusek <pba@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" +);