/* Yaffs commands. * Modified by Charles Manning by adding ydevconfig command. * * Use ydevconfig to configure a mountpoint before use. * For example: * # Configure mountpt xxx using nand device 0 using blocks 100-500 * ydevconfig xxx 0 100 500 * # Mount it * ymount xxx * # yls, yrdm etc * yls -l xxx * yrdm xxx/boot-image 82000000 * ... */ #include #include #include #ifdef YAFFS2_DEBUG #define PRINTF(fmt, args...) printf(fmt, ##args) #else #define PRINTF(fmt, args...) do { } while (0) #endif extern void cmd_yaffs_dev_ls(void); extern void cmd_yaffs_tracemask(unsigned set, unsigned mask); extern void cmd_yaffs_devconfig(char *mp, int flash_dev, int start_block, int end_block); extern void cmd_yaffs_mount(char *mp); extern void cmd_yaffs_umount(char *mp); extern void cmd_yaffs_read_file(char *fn); extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile); extern void cmd_yaffs_ls(const char *mountpt, int longlist); extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size); extern void cmd_yaffs_mread_file(char *fn, char *addr); extern void cmd_yaffs_mkdir(const char *dir); extern void cmd_yaffs_rmdir(const char *dir); extern void cmd_yaffs_rm(const char *path); extern void cmd_yaffs_mv(const char *oldPath, const char *newPath); extern int yaffs_dump_dev(const char *path); /* ytrace - show/set yaffs trace mask */ int do_ytrace(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { if (argc > 1) cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16)); else cmd_yaffs_tracemask(0, 0); return 0; } /* ydevls - lists yaffs mount points. */ int do_ydevls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { cmd_yaffs_dev_ls(); return 0; } /* ydevconfig mount_pt mtd_dev_num start_block end_block */ int do_ydevconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *mtpoint; int mtd_dev; int start_block; int end_block; if (argc != 5) { printf ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n"); return -1; } mtpoint = argv[1]; mtd_dev = simple_strtol(argv[2], NULL, 16); start_block = simple_strtol(argv[3], NULL, 16); end_block = simple_strtol(argv[4], NULL, 16); cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block); return 0; } int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *mtpoint; if (argc != 2) { printf("Bad arguments: ymount mount_pt\n"); return -1; } mtpoint = argv[1]; printf("Mounting yaffs2 mount point %s\n", mtpoint); cmd_yaffs_mount(mtpoint); return 0; } int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *mtpoint; if (argc != 2) { printf("Bad arguments: yumount mount_pt\n"); return -1; } mtpoint = argv[1]; printf("Unmounting yaffs2 mount point %s\n", mtpoint); cmd_yaffs_umount(mtpoint); return 0; } int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *dirname; if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) { printf("Bad arguments: yls [-l] dir\n"); return -1; } dirname = argv[argc - 1]; cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0); return 0; } int do_yrd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *filename; if (argc != 2) { printf("Bad arguments: yrd file_name\n"); return -1; } filename = argv[1]; printf("Reading file %s ", filename); cmd_yaffs_read_file(filename); printf("done\n"); return 0; } int do_ywr(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *filename; ulong value; ulong numValues; if (argc != 4) { printf("Bad arguments: ywr file_name value n_values\n"); return -1; } filename = argv[1]; value = simple_strtoul(argv[2], NULL, 16); numValues = simple_strtoul(argv[3], NULL, 16); printf("Writing value (%lx) %lx times to %s... ", value, numValues, filename); cmd_yaffs_write_file(filename, value, numValues); printf("done\n"); return 0; } int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *filename; ulong addr; if (argc != 3) { printf("Bad arguments: yrdm file_name addr\n"); return -1; } filename = argv[1]; addr = simple_strtoul(argv[2], NULL, 16); cmd_yaffs_mread_file(filename, (char *)addr); return 0; } int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *filename; ulong addr; ulong size; if (argc != 4) { printf("Bad arguments: ywrm file_name addr size\n"); return -1; } filename = argv[1]; addr = simple_strtoul(argv[2], NULL, 16); size = simple_strtoul(argv[3], NULL, 16); cmd_yaffs_mwrite_file(filename, (char *)addr, size); return 0; } int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *dirname; if (argc != 2) { printf("Bad arguments: ymkdir dir_name\n"); return -1; } dirname = argv[1]; cmd_yaffs_mkdir(dirname); return 0; } int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *dirname; if (argc != 2) { printf("Bad arguments: yrmdir dir_name\n"); return -1; } dirname = argv[1]; cmd_yaffs_rmdir(dirname); return 0; } int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *name; if (argc != 2) { printf("Bad arguments: yrm name\n"); return -1; } name = argv[1]; cmd_yaffs_rm(name); return 0; } int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *oldPath; char *newPath; if (argc != 3) { printf("Bad arguments: ymv old_path new_path\n"); return -1; } oldPath = argv[1]; newPath = argv[2]; cmd_yaffs_mv(newPath, oldPath); return 0; } U_BOOT_CMD(ytrace, 2, 0, do_ytrace, "show/set yaffs trace mask", "ytrace [new_mask] show/set yaffs trace mask"); U_BOOT_CMD(ydevls, 1, 0, do_ydevls, "list yaffs mount points", "list yaffs mount points"); U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig, "configure yaffs mount point", "ydevconfig mtpoint mtd_id start_block end_block configures a yaffs2 mount point"); U_BOOT_CMD(ymount, 2, 0, do_ymount, "mount yaffs", "ymount mtpoint mounts a yaffs2 mount point"); U_BOOT_CMD(yumount, 2, 0, do_yumount, "unmount yaffs", "yunmount mtpoint unmounts a yaffs2 mount point"); U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "yls [-l] dirname"); U_BOOT_CMD(yrd, 2, 0, do_yrd, "read file from yaffs", "yrd path read file from yaffs"); U_BOOT_CMD(ywr, 4, 0, do_ywr, "write file to yaffs", "ywr filename value num_vlues write values to yaffs file"); U_BOOT_CMD(yrdm, 3, 0, do_yrdm, "read file to memory from yaffs", "yrdm filename offset reads yaffs file into memory"); U_BOOT_CMD(ywrm, 4, 0, do_ywrm, "write file from memory to yaffs", "ywrm filename offset size writes memory to yaffs file"); U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir, "YAFFS mkdir", "ymkdir dir create a yaffs directory"); U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir, "YAFFS rmdir", "yrmdir dirname removes a yaffs directory"); U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "yrm path removes a yaffs file"); U_BOOT_CMD(ymv, 4, 0, do_ymv, "YAFFS mv", "ymv old_path new_path moves/rename files within a yaffs mount point");