fs: Add command to retrieve the filesystem type
New command to determine the filesystem type of a given partition. Optionally stores the filesystem type in a environment variable. Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Reviewed-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
parent
2af13d6b62
commit
1a1ad8e090
@ -81,3 +81,18 @@ U_BOOT_CMD(
|
||||
" - List files in directory 'directory' of partition 'part' on\n"
|
||||
" device type 'interface' instance 'dev'."
|
||||
)
|
||||
|
||||
static int do_fstype_wrapper(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||
char * const argv[])
|
||||
{
|
||||
return do_fs_type(cmdtp, flag, argc, argv);
|
||||
}
|
||||
|
||||
U_BOOT_CMD(
|
||||
fstype, 4, 1, do_fstype_wrapper,
|
||||
"Look up a filesystem type",
|
||||
"<interface> <dev>:<part>\n"
|
||||
"- print filesystem type\n"
|
||||
"fstype <interface> <dev>:<part> <varname>\n"
|
||||
"- set environment variable to filesystem type\n"
|
||||
);
|
||||
|
27
fs/fs.c
27
fs/fs.c
@ -79,6 +79,7 @@ static inline int fs_uuid_unsupported(char *uuid_str)
|
||||
|
||||
struct fstype_info {
|
||||
int fstype;
|
||||
char *name;
|
||||
/*
|
||||
* Is it legal to pass NULL as .probe()'s fs_dev_desc parameter? This
|
||||
* should be false in most cases. For "virtual" filesystems which
|
||||
@ -105,6 +106,7 @@ static struct fstype_info fstypes[] = {
|
||||
#ifdef CONFIG_FS_FAT
|
||||
{
|
||||
.fstype = FS_TYPE_FAT,
|
||||
.name = "fat",
|
||||
.null_dev_desc_ok = false,
|
||||
.probe = fat_set_blk_dev,
|
||||
.close = fat_close,
|
||||
@ -123,6 +125,7 @@ static struct fstype_info fstypes[] = {
|
||||
#ifdef CONFIG_FS_EXT4
|
||||
{
|
||||
.fstype = FS_TYPE_EXT,
|
||||
.name = "ext4",
|
||||
.null_dev_desc_ok = false,
|
||||
.probe = ext4fs_probe,
|
||||
.close = ext4fs_close,
|
||||
@ -141,6 +144,7 @@ static struct fstype_info fstypes[] = {
|
||||
#ifdef CONFIG_SANDBOX
|
||||
{
|
||||
.fstype = FS_TYPE_SANDBOX,
|
||||
.name = "sandbox",
|
||||
.null_dev_desc_ok = true,
|
||||
.probe = sandbox_fs_set_blk_dev,
|
||||
.close = sandbox_fs_close,
|
||||
@ -154,6 +158,7 @@ static struct fstype_info fstypes[] = {
|
||||
#endif
|
||||
{
|
||||
.fstype = FS_TYPE_ANY,
|
||||
.name = "unsupported",
|
||||
.null_dev_desc_ok = true,
|
||||
.probe = fs_probe_unsupported,
|
||||
.close = fs_close_unsupported,
|
||||
@ -190,6 +195,7 @@ int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
|
||||
if (!relocated) {
|
||||
for (i = 0, info = fstypes; i < ARRAY_SIZE(fstypes);
|
||||
i++, info++) {
|
||||
info->name += gd->reloc_off;
|
||||
info->probe += gd->reloc_off;
|
||||
info->close += gd->reloc_off;
|
||||
info->ls += gd->reloc_off;
|
||||
@ -503,3 +509,24 @@ int do_fs_uuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
int do_fs_type(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
struct fstype_info *info;
|
||||
|
||||
if (argc < 3 || argc > 4)
|
||||
return CMD_RET_USAGE;
|
||||
|
||||
if (fs_set_blk_dev(argv[1], argv[2], FS_TYPE_ANY))
|
||||
return 1;
|
||||
|
||||
info = fs_get_info(fs_type);
|
||||
|
||||
if (argc == 4)
|
||||
setenv(argv[3], info->name);
|
||||
else
|
||||
printf("%s\n", info->name);
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -109,4 +109,10 @@ int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
|
||||
int do_fs_uuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
|
||||
int fstype);
|
||||
|
||||
/*
|
||||
* Determine the type of the specified filesystem and print it. Optionally it is
|
||||
* possible to store the type directly in env.
|
||||
*/
|
||||
int do_fs_type(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
|
||||
|
||||
#endif /* _FS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user