diff --git a/common/Makefile b/common/Makefile index 7237ff4..23171ca 100644 --- a/common/Makefile +++ b/common/Makefile @@ -130,6 +130,7 @@ COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o COBJS-$(CONFIG_CMD_UBI) += cmd_ubi.o +COBJS-$(CONFIG_CMD_UBIFS) += cmd_ubifs.o COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o ifdef CONFIG_CMD_USB COBJS-y += cmd_usb.o diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c new file mode 100644 index 0000000..b2e0f4f --- /dev/null +++ b/common/cmd_ubifs.c @@ -0,0 +1,132 @@ +/* + * (C) Copyright 2008 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + + +/* + * UBIFS command support + */ + +#undef DEBUG + +#include +#include +#include + +static int ubifs_initialized; +static int ubifs_mounted; + +/* Prototypes */ +int ubifs_init(void); +int ubifs_mount(char *vol_name); +int ubifs_ls(char *dir_name); +int ubifs_load(char *filename, u32 addr, u32 size); + +int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + char *vol_name; + int ret; + + vol_name = argv[1]; + debug("Using volume %s\n", vol_name); + + if (ubifs_initialized == 0) { + ubifs_init(); + ubifs_initialized = 1; + } + + ret = ubifs_mount(vol_name); + if (ret) + return -1; + + ubifs_mounted = 1; + + return 0; +} + +int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + char *filename = "/"; + int ret; + + if (!ubifs_mounted) { + printf("UBIFS not mounted, use ubifs mount to mount volume first!\n"); + return -1; + } + + if (argc == 2) + filename = argv[1]; + debug("Using filename %s\n", filename); + + ret = ubifs_ls(filename); + if (ret) + printf("%s not found!\n", filename); + + return ret; +} + +int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + char *filename; + int ret; + u32 addr; + u32 size = 0; + + if (!ubifs_mounted) { + printf("UBIFS not mounted, use ubifs mount to mount volume first!\n"); + return -1; + } + + if (argc < 3) { + printf("Usage:\n%s\n", cmdtp->usage); + return -1; + } + + addr = simple_strtoul(argv[1], NULL, 16); + filename = argv[2]; + + if (argc == 4) + size = simple_strtoul(argv[3], NULL, 16); + debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size); + + ret = ubifs_load(filename, addr, size); + if (ret) + printf("%s not found!\n", filename); + + return ret; +} + +U_BOOT_CMD( + ubifsmount, 2, 0, do_ubifs_mount, + "ubifsmount- mount UBIFS volume\n", + "\n"); + +U_BOOT_CMD(ubifsls, 2, 0, do_ubifs_ls, + "ubifsls - list files in a directory\n", + "[directory]\n" + " - list files in a 'directory' (default '/')\n"); + +U_BOOT_CMD(ubifsload, 4, 0, do_ubifs_load, + "ubifsload- load file from an UBIFS filesystem\n", + " [bytes]\n" + " - load file 'filename' to address 'addr'\n");