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"
|
" - List files in directory 'directory' of partition 'part' on\n"
|
||||||
" device type 'interface' instance 'dev'."
|
" 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 {
|
struct fstype_info {
|
||||||
int fstype;
|
int fstype;
|
||||||
|
char *name;
|
||||||
/*
|
/*
|
||||||
* Is it legal to pass NULL as .probe()'s fs_dev_desc parameter? This
|
* Is it legal to pass NULL as .probe()'s fs_dev_desc parameter? This
|
||||||
* should be false in most cases. For "virtual" filesystems which
|
* should be false in most cases. For "virtual" filesystems which
|
||||||
|
@ -105,6 +106,7 @@ static struct fstype_info fstypes[] = {
|
||||||
#ifdef CONFIG_FS_FAT
|
#ifdef CONFIG_FS_FAT
|
||||||
{
|
{
|
||||||
.fstype = FS_TYPE_FAT,
|
.fstype = FS_TYPE_FAT,
|
||||||
|
.name = "fat",
|
||||||
.null_dev_desc_ok = false,
|
.null_dev_desc_ok = false,
|
||||||
.probe = fat_set_blk_dev,
|
.probe = fat_set_blk_dev,
|
||||||
.close = fat_close,
|
.close = fat_close,
|
||||||
|
@ -123,6 +125,7 @@ static struct fstype_info fstypes[] = {
|
||||||
#ifdef CONFIG_FS_EXT4
|
#ifdef CONFIG_FS_EXT4
|
||||||
{
|
{
|
||||||
.fstype = FS_TYPE_EXT,
|
.fstype = FS_TYPE_EXT,
|
||||||
|
.name = "ext4",
|
||||||
.null_dev_desc_ok = false,
|
.null_dev_desc_ok = false,
|
||||||
.probe = ext4fs_probe,
|
.probe = ext4fs_probe,
|
||||||
.close = ext4fs_close,
|
.close = ext4fs_close,
|
||||||
|
@ -141,6 +144,7 @@ static struct fstype_info fstypes[] = {
|
||||||
#ifdef CONFIG_SANDBOX
|
#ifdef CONFIG_SANDBOX
|
||||||
{
|
{
|
||||||
.fstype = FS_TYPE_SANDBOX,
|
.fstype = FS_TYPE_SANDBOX,
|
||||||
|
.name = "sandbox",
|
||||||
.null_dev_desc_ok = true,
|
.null_dev_desc_ok = true,
|
||||||
.probe = sandbox_fs_set_blk_dev,
|
.probe = sandbox_fs_set_blk_dev,
|
||||||
.close = sandbox_fs_close,
|
.close = sandbox_fs_close,
|
||||||
|
@ -154,6 +158,7 @@ static struct fstype_info fstypes[] = {
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
.fstype = FS_TYPE_ANY,
|
.fstype = FS_TYPE_ANY,
|
||||||
|
.name = "unsupported",
|
||||||
.null_dev_desc_ok = true,
|
.null_dev_desc_ok = true,
|
||||||
.probe = fs_probe_unsupported,
|
.probe = fs_probe_unsupported,
|
||||||
.close = fs_close_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) {
|
if (!relocated) {
|
||||||
for (i = 0, info = fstypes; i < ARRAY_SIZE(fstypes);
|
for (i = 0, info = fstypes; i < ARRAY_SIZE(fstypes);
|
||||||
i++, info++) {
|
i++, info++) {
|
||||||
|
info->name += gd->reloc_off;
|
||||||
info->probe += gd->reloc_off;
|
info->probe += gd->reloc_off;
|
||||||
info->close += gd->reloc_off;
|
info->close += gd->reloc_off;
|
||||||
info->ls += 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;
|
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 do_fs_uuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
|
||||||
int fstype);
|
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 */
|
#endif /* _FS_H */
|
||||||
|
|
Loading…
Reference in New Issue