fs: make it possible to read the filesystem UUID
Subsystems (2)
PATCH v3 1/1 fs: make it possible to read the filesystem UUID
Some filesystems have a UUID stored in its superblock. To allow using root=UUID=... for the kernel command line we need a way to read-out the filesystem UUID.
changes rfc -> v1:
- make the environment variable an option parameter. If not given, the UUID is printed out. If given, it is stored in the env variable.
- corrected typos
- return error codes
changes v1 -> v2:
- fix return code of do_fs_uuid(..)
- document do_fs_uuid(..)
- implement fs_uuid_unsuported(..) be more consistent with the way other optional functionality works
changes v2 -> v3:
- change ext4fs_uuid(..) to make use of #if .. #else .. #endif construct to get rid of unreachable code
Hit any key to stop autoboot: 0
=> fsuuid
fsuuid - Look up a filesystem UUID
Usage:
fsuuid <interface> <dev>:<part>
- print filesystem UUID
fsuuid <interface> <dev>:<part> <varname>
- set environment variable to filesystem UUID
=> fsuuid mmc 0:1
d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> fsuuid mmc 0:2
eb3db83c-7b28-499f-95ce-9e0bb21cda81
=> fsuuid mmc 0:1 uuid1
=> fsuuid mmc 0:2 uuid2
=> printenv uuid1
uuid1=d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> printenv uuid2
uuid2=eb3db83c-7b28-499f-95ce-9e0bb21cda81
=>
--- README | 1 + common/Makefile | 1 + common/cmd_fs_uuid.c | 26 ++++++++++++++++++++++++++ fs/ext4/ext4fs.c | 15 +++++++++++++++ fs/fs.c | 43 +++++++++++++++++++++++++++++++++++++++++++ include/ext4fs.h | 1 + include/fs.h | 7 +++++++ 7 files changed, 94 insertions(+) create mode 100644 common/cmd_fs_uuid.c
README +1 -0
@@ -989,6 +989,7 @@ The following options need to be configured: CONFIG_CMD_EXT4 * ext4 command support CONFIG_CMD_FS_GENERIC * filesystem commands (e.g. load, ls) that work for multiple fs types + CONFIG_CMD_FS_UUID * Look up a filesystem UUID CONFIG_CMD_SAVEENV saveenv CONFIG_CMD_FDC * Floppy Disk Support CONFIG_CMD_FAT * FAT command support
common/Makefile +1 -0
@@ -188,6 +188,7 @@ obj-y += usb.o usb_hub.o obj-$(CONFIG_USB_STORAGE) += usb_storage.o endif obj-$(CONFIG_CMD_FASTBOOT) += cmd_fastboot.o +obj-$(CONFIG_CMD_FS_UUID) += cmd_fs_uuid.o obj-$(CONFIG_CMD_USB_MASS_STORAGE) += cmd_usb_mass_storage.o obj-$(CONFIG_CMD_THOR_DOWNLOAD) += cmd_thordown.o
common/cmd_fs_uuid.c new file +26 -0
@@ -0,0 +1,26 @@ +/* +* cmd_fs_uuid.c -- fsuuid command +* +* Copyright (C) 2014, Bachmann electronic GmbH +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <command.h> +#include <fs.h> + +static int do_fs_uuid_wrapper (cmd_tbl_t *cmdtp,int flag, +int argc,char *const argv[]) +{ +return do_fs_uuid (cmdtp, flag, argc, argv,FS_TYPE_ANY ); +} + +U_BOOT_CMD ( + fsuuid,4 ,1 , do_fs_uuid_wrapper, +"Look up a filesystem UUID" , +"<interface> <dev>:<part>\n" +" - print filesystem UUID\n" +"fsuuid <interface> <dev>:<part> <varname>\n" +" - set environment variable to filesystem UUID\n" +);
fs/ext4/ext4fs.c +15 -0
@@ -231,3 +231,18 @@ int ext4_read_file(const char *filename, void *buf, int offset, int len)return len_read; } + +int ext4fs_uuid (char *uuid_str) +{ +if (ext4fs_root ==NULL ) +return -1 ; + +#ifdef CONFIG_LIB_UUID +uuid_bin_to_str ((unsigned char *)ext4fs_root->sblock.unique_id, + uuid_str,UUID_STR_FORMAT_STD ); + +return 0 ; +#else +return -ENOSYS ; +#endif +}
fs/fs.c +43 -0
94 lines not on this page · raw message
include/ext4fs.h +1 -0
@@ -145,4 +145,5 @@ int ext4fs_probe(block_dev_desc_t *fs_dev_desc, disk_partition_t *fs_partition);int ext4_read_file (const char *filename,void *buf,int offset,int len);int ext4_read_superblock (char *buffer); +int ext4fs_uuid (char *uuid_str);#endif
include/fs.h +7 -0
@@ -93,4 +93,11 @@ int file_exists(const char *dev_type, const char *dev_part, const char *file,int do_save (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[],int fstype); +/* +* Determine the UUID of the specified filesystem and print it. Optionally it is +* possible to store the UUID directly in env. +*/ +int do_fs_uuid (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[], +int fstype); +#endif /* _FS_H */
Signature · 1 line
1.9.3
PATCH v2 1/1 fs: make it possible to read the filesystem UUID
Some filesystems have a UUID stored in its superblock. To allow using root=UUID=... for the kernel command line we need a way to read-out the filesystem UUID.
changes rfc -> v1:
- make the environment variable an option parameter. If not given, the UUID is printed out. If given, it is stored in the env variable.
- corrected typos
- return error codes
changes v1 -> v2:
- fix return code of do_fs_uuid(..)
- document do_fs_uuid(..)
- implement fs_uuid_unsuported(..) be more consistent with the way other optional functionality works
Hit any key to stop autoboot: 0
=> fsuuid
fsuuid - Look up a filesystem UUID
Usage:
fsuuid <interface> <dev>:<part>
- print filesystem UUID
fsuuid <interface> <dev>:<part> <varname>
- set environment variable to filesystem UUID
=> fsuuid mmc 0:1
d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> fsuuid mmc 0:2
eb3db83c-7b28-499f-95ce-9e0bb21cda81
=> fsuuid mmc 0:1 uuid1
=> fsuuid mmc 0:2 uuid2
=> printenv uuid1
uuid1=d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> printenv uuid2
uuid2=eb3db83c-7b28-499f-95ce-9e0bb21cda81
=>
--- README | 1 + common/Makefile | 1 + common/cmd_fs_uuid.c | 26 ++++++++++++++++++++++++++ fs/ext4/ext4fs.c | 15 +++++++++++++++ fs/fs.c | 43 +++++++++++++++++++++++++++++++++++++++++++ include/ext4fs.h | 1 + include/fs.h | 7 +++++++ 7 files changed, 94 insertions(+) create mode 100644 common/cmd_fs_uuid.c
README +1 -0
@@ -989,6 +989,7 @@ The following options need to be configured: CONFIG_CMD_EXT4 * ext4 command support CONFIG_CMD_FS_GENERIC * filesystem commands (e.g. load, ls) that work for multiple fs types + CONFIG_CMD_FS_UUID * Look up a filesystem UUID CONFIG_CMD_SAVEENV saveenv CONFIG_CMD_FDC * Floppy Disk Support CONFIG_CMD_FAT * FAT command support
common/Makefile +1 -0
@@ -188,6 +188,7 @@ obj-y += usb.o usb_hub.o obj-$(CONFIG_USB_STORAGE) += usb_storage.o endif obj-$(CONFIG_CMD_FASTBOOT) += cmd_fastboot.o +obj-$(CONFIG_CMD_FS_UUID) += cmd_fs_uuid.o obj-$(CONFIG_CMD_USB_MASS_STORAGE) += cmd_usb_mass_storage.o obj-$(CONFIG_CMD_THOR_DOWNLOAD) += cmd_thordown.o
common/cmd_fs_uuid.c new file +26 -0
@@ -0,0 +1,26 @@ +/* +* cmd_fs_uuid.c -- fsuuid command +* +* Copyright (C) 2014, Bachmann electronic GmbH +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <command.h> +#include <fs.h> + +static int do_fs_uuid_wrapper (cmd_tbl_t *cmdtp,int flag, +int argc,char *const argv[]) +{ +return do_fs_uuid (cmdtp, flag, argc, argv,FS_TYPE_ANY ); +} + +U_BOOT_CMD ( + fsuuid,4 ,1 , do_fs_uuid_wrapper, +"Look up a filesystem UUID" , +"<interface> <dev>:<part>\n" +" - print filesystem UUID\n" +"fsuuid <interface> <dev>:<part> <varname>\n" +" - set environment variable to filesystem UUID\n" +);
fs/ext4/ext4fs.c +15 -0
@@ -231,3 +231,18 @@ int ext4_read_file(const char *filename, void *buf, int offset, int len)return len_read; } + +int ext4fs_uuid (char *uuid_str) +{ +if (ext4fs_root ==NULL ) +return -1 ; + +#ifdef CONFIG_LIB_UUID +uuid_bin_to_str ((unsigned char *)ext4fs_root->sblock.unique_id, + uuid_str,UUID_STR_FORMAT_STD ); + +return 0 ; +#endif + +return -ENOSYS ; +}
fs/fs.c +43 -0
94 lines not on this page · raw message
include/ext4fs.h +1 -0
@@ -145,4 +145,5 @@ int ext4fs_probe(block_dev_desc_t *fs_dev_desc, disk_partition_t *fs_partition);int ext4_read_file (const char *filename,void *buf,int offset,int len);int ext4_read_superblock (char *buffer); +int ext4fs_uuid (char *uuid_str);#endif
include/fs.h +7 -0
@@ -93,4 +93,11 @@ int file_exists(const char *dev_type, const char *dev_part, const char *file,int do_save (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[],int fstype); +/* +* Determine the UUID of the specified filesystem and print it. Optionally it is +* possible to store the UUID directly in env. +*/ +int do_fs_uuid (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[], +int fstype); +#endif /* _FS_H */
Signature · 1 line
1.9.3
PATCH v2 1/1 fs: make it possible to read the filesystem UUID
Quoted 39 lines · Christian Gmeiner
Some filesystems have a UUID stored in its superblock. To allow using root=UUID=... for the kernel command line we need a way to read-out the filesystem UUID.
changes rfc -> v1:
- make the environment variable an option parameter. If not given, the UUID is printed out. If given, it is stored in the env variable.
- corrected typos
- return error codeschanges v1 -> v2:
- fix return code ofdo_fs_uuid(..)
- documentdo_fs_uuid(..)
- implementfs_uuid_unsuported(..)be more consistent with the way other optional functionality worksHit any key to stop autoboot: 0
=> fsuuid
fsuuid - Look up a filesystem UUIDUsage:
fsuuid <interface> <dev>:<part>
- print filesystem UUID
fsuuid <interface> <dev>:<part> <varname>
- set environment variable to filesystem UUID=> fsuuid mmc 0:1
d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> fsuuid mmc 0:2
eb3db83c-7b28-499f-95ce-9e0bb21cda81
=> fsuuid mmc 0:1 uuid1
=> fsuuid mmc 0:2 uuid2
=> printenv uuid1
uuid1=d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> printenv uuid2
uuid2=eb3db83c-7b28-499f-95ce-9e0bb21cda81
=>
Quoted 1 line
Signed-off-by Christian Gmeiner <[email protected]>
Tested on Pi with eMMC:
PATCH v3 1/1 fs: make it possible to read the filesystem UUID
In reply to Christian GmeinerQuoted 43 lines · Christian Gmeiner
Some filesystems have a UUID stored in its superblock. To allow using root=UUID=... for the kernel command line we need a way to read-out the filesystem UUID.
changes rfc -> v1:
- make the environment variable an option parameter. If not given, the UUID is printed out. If given, it is stored in the env variable.
- corrected typos
- return error codeschanges v1 -> v2:
- fix return code ofdo_fs_uuid(..)
- documentdo_fs_uuid(..)
- implementfs_uuid_unsuported(..)be more consistent with the way other optional functionality workschanges v2 -> v3:
- changeext4fs_uuid(..)to make use of #if .. #else .. #endif construct to get rid of unreachable codeHit any key to stop autoboot: 0
=> fsuuid
fsuuid - Look up a filesystem UUIDUsage:
fsuuid <interface> <dev>:<part>
- print filesystem UUID
fsuuid <interface> <dev>:<part> <varname>
- set environment variable to filesystem UUID=> fsuuid mmc 0:1
d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> fsuuid mmc 0:2
eb3db83c-7b28-499f-95ce-9e0bb21cda81
=> fsuuid mmc 0:1 uuid1
=> fsuuid mmc 0:2 uuid2
=> printenv uuid1
uuid1=d9f9fc05-45ae-4a36-a616-fccce0e4f887
=> printenv uuid2
uuid2=eb3db83c-7b28-499f-95ce-9e0bb21cda81
=>
Quoted 2 lines
Signed-off-by Christian Gmeiner <[email protected]>Acked-by Stephen Warren <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20141124/576ae251/attachment.pgp>