uboot/cmd/yaffs2.c
<<
>>
Prefs
   1/* Yaffs commands.
   2 * Modified by Charles Manning by adding ydevconfig command.
   3 *
   4 * Use ydevconfig to configure a mountpoint before use.
   5 * For example:
   6 *  # Configure mountpt xxx using nand device 0 using blocks 100-500
   7 *  ydevconfig xxx 0 100 500
   8 *  # Mount it
   9 *  ymount xxx
  10 *  # yls, yrdm etc
  11 *  yls -l xxx
  12 *  yrdm xxx/boot-image 82000000
  13 *  ...
  14 */
  15
  16#include <common.h>
  17
  18#include <config.h>
  19#include <command.h>
  20
  21#ifdef YAFFS2_DEBUG
  22#define PRINTF(fmt, args...) printf(fmt, ##args)
  23#else
  24#define PRINTF(fmt, args...) do { } while (0)
  25#endif
  26
  27extern void cmd_yaffs_dev_ls(void);
  28extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
  29extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
  30                                int start_block, int end_block);
  31extern void cmd_yaffs_mount(char *mp);
  32extern void cmd_yaffs_umount(char *mp);
  33extern void cmd_yaffs_read_file(char *fn);
  34extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
  35extern void cmd_yaffs_ls(const char *mountpt, int longlist);
  36extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
  37extern void cmd_yaffs_mread_file(char *fn, char *addr);
  38extern void cmd_yaffs_mkdir(const char *dir);
  39extern void cmd_yaffs_rmdir(const char *dir);
  40extern void cmd_yaffs_rm(const char *path);
  41extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
  42
  43extern int yaffs_dump_dev(const char *path);
  44
  45/* ytrace - show/set yaffs trace mask */
  46int do_ytrace(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  47{
  48        if (argc > 1)
  49                cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
  50        else
  51                cmd_yaffs_tracemask(0, 0);
  52
  53        return 0;
  54}
  55
  56/* ydevls - lists yaffs mount points. */
  57int do_ydevls(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  58{
  59        cmd_yaffs_dev_ls();
  60
  61        return 0;
  62}
  63
  64/* ydevconfig mount_pt mtd_dev_num start_block end_block */
  65int do_ydevconfig(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  66{
  67        char *mtpoint;
  68        int mtd_dev;
  69        int start_block;
  70        int end_block;
  71
  72        if (argc != 5) {
  73                printf
  74                    ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
  75                return -1;
  76        }
  77
  78        mtpoint = argv[1];
  79        mtd_dev = simple_strtol(argv[2], NULL, 16);
  80        start_block = simple_strtol(argv[3], NULL, 16);
  81        end_block = simple_strtol(argv[4], NULL, 16);
  82
  83        cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
  84
  85        return 0;
  86}
  87
  88int do_ymount(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  89{
  90        char *mtpoint;
  91
  92        if (argc != 2) {
  93                printf("Bad arguments: ymount mount_pt\n");
  94                return -1;
  95        }
  96
  97        mtpoint = argv[1];
  98        printf("Mounting yaffs2 mount point %s\n", mtpoint);
  99
 100        cmd_yaffs_mount(mtpoint);
 101
 102        return 0;
 103}
 104
 105int do_yumount(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 106{
 107        char *mtpoint;
 108
 109        if (argc != 2) {
 110                printf("Bad arguments: yumount mount_pt\n");
 111                return -1;
 112        }
 113
 114        mtpoint = argv[1];
 115        printf("Unmounting yaffs2 mount point %s\n", mtpoint);
 116        cmd_yaffs_umount(mtpoint);
 117
 118        return 0;
 119}
 120
 121int do_yls(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 122{
 123        char *dirname;
 124
 125        if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
 126                printf("Bad arguments: yls [-l] dir\n");
 127                return -1;
 128        }
 129
 130        dirname = argv[argc - 1];
 131
 132        cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
 133
 134        return 0;
 135}
 136
 137int do_yrd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 138{
 139        char *filename;
 140
 141        if (argc != 2) {
 142                printf("Bad arguments: yrd file_name\n");
 143                return -1;
 144        }
 145
 146        filename = argv[1];
 147
 148        printf("Reading file %s ", filename);
 149
 150        cmd_yaffs_read_file(filename);
 151
 152        printf("done\n");
 153        return 0;
 154}
 155
 156int do_ywr(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 157{
 158        char *filename;
 159        ulong value;
 160        ulong numValues;
 161
 162        if (argc != 4) {
 163                printf("Bad arguments: ywr file_name value n_values\n");
 164                return -1;
 165        }
 166
 167        filename = argv[1];
 168        value = hextoul(argv[2], NULL);
 169        numValues = hextoul(argv[3], NULL);
 170
 171        printf("Writing value (%lx) %lx times to %s... ", value, numValues,
 172               filename);
 173
 174        cmd_yaffs_write_file(filename, value, numValues);
 175
 176        printf("done\n");
 177        return 0;
 178}
 179
 180int do_yrdm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 181{
 182        char *filename;
 183        ulong addr;
 184
 185        if (argc != 3) {
 186                printf("Bad arguments: yrdm file_name addr\n");
 187                return -1;
 188        }
 189
 190        filename = argv[1];
 191        addr = hextoul(argv[2], NULL);
 192
 193        cmd_yaffs_mread_file(filename, (char *)addr);
 194
 195        return 0;
 196}
 197
 198int do_ywrm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 199{
 200        char *filename;
 201        ulong addr;
 202        ulong size;
 203
 204        if (argc != 4) {
 205                printf("Bad arguments: ywrm file_name addr size\n");
 206                return -1;
 207        }
 208
 209        filename = argv[1];
 210        addr = hextoul(argv[2], NULL);
 211        size = hextoul(argv[3], NULL);
 212
 213        cmd_yaffs_mwrite_file(filename, (char *)addr, size);
 214
 215        return 0;
 216}
 217
 218int do_ymkdir(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 219{
 220        char *dirname;
 221
 222        if (argc != 2) {
 223                printf("Bad arguments: ymkdir dir_name\n");
 224                return -1;
 225        }
 226
 227        dirname = argv[1];
 228        cmd_yaffs_mkdir(dirname);
 229
 230        return 0;
 231}
 232
 233int do_yrmdir(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 234{
 235        char *dirname;
 236
 237        if (argc != 2) {
 238                printf("Bad arguments: yrmdir dir_name\n");
 239                return -1;
 240        }
 241
 242        dirname = argv[1];
 243        cmd_yaffs_rmdir(dirname);
 244
 245        return 0;
 246}
 247
 248int do_yrm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 249{
 250        char *name;
 251
 252        if (argc != 2) {
 253                printf("Bad arguments: yrm name\n");
 254                return -1;
 255        }
 256
 257        name = argv[1];
 258
 259        cmd_yaffs_rm(name);
 260
 261        return 0;
 262}
 263
 264int do_ymv(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 265{
 266        char *oldPath;
 267        char *newPath;
 268
 269        if (argc != 3) {
 270                printf("Bad arguments: ymv old_path new_path\n");
 271                return -1;
 272        }
 273
 274        oldPath = argv[1];
 275        newPath = argv[2];
 276
 277        cmd_yaffs_mv(newPath, oldPath);
 278
 279        return 0;
 280}
 281
 282U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
 283           "show/set yaffs trace mask",
 284           "[new_mask]  show/set yaffs trace mask");
 285
 286U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
 287           "list yaffs mount points", "list yaffs mount points");
 288
 289U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
 290           "configure yaffs mount point",
 291           "mtpoint mtd_id start_block end_block   configures a yaffs2 mount point");
 292
 293U_BOOT_CMD(ymount, 2, 0, do_ymount,
 294           "mount yaffs", "mtpoint  mounts a yaffs2 mount point");
 295
 296U_BOOT_CMD(yumount, 2, 0, do_yumount,
 297           "unmount yaffs", "mtpoint  unmounts a yaffs2 mount point");
 298
 299U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname");
 300
 301U_BOOT_CMD(yrd, 2, 0, do_yrd,
 302           "read file from yaffs", "path   read file from yaffs");
 303
 304U_BOOT_CMD(ywr, 4, 0, do_ywr,
 305           "write file to yaffs",
 306           "filename value num_vlues   write values to yaffs file");
 307
 308U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
 309           "read file to memory from yaffs",
 310           "filename offset    reads yaffs file into memory");
 311
 312U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
 313           "write file from memory to yaffs",
 314           "filename offset size  writes memory to yaffs file");
 315
 316U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
 317           "YAFFS mkdir", "dir    create a yaffs directory");
 318
 319U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
 320           "YAFFS rmdir", "dirname   removes a yaffs directory");
 321
 322U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path   removes a yaffs file");
 323
 324U_BOOT_CMD(ymv, 4, 0, do_ymv,
 325           "YAFFS mv",
 326           "old_path new_path   moves/rename files within a yaffs mount point");
 327