327 lines
7.0 KiB
C
327 lines
7.0 KiB
C
/* 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 <common.h>
|
|
|
|
#include <config.h>
|
|
#include <command.h>
|
|
|
|
#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",
|
|
"[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",
|
|
"mtpoint mtd_id start_block end_block configures a yaffs2 mount point");
|
|
|
|
U_BOOT_CMD(ymount, 2, 0, do_ymount,
|
|
"mount yaffs", "mtpoint mounts a yaffs2 mount point");
|
|
|
|
U_BOOT_CMD(yumount, 2, 0, do_yumount,
|
|
"unmount yaffs", "mtpoint unmounts a yaffs2 mount point");
|
|
|
|
U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname");
|
|
|
|
U_BOOT_CMD(yrd, 2, 0, do_yrd,
|
|
"read file from yaffs", "path read file from yaffs");
|
|
|
|
U_BOOT_CMD(ywr, 4, 0, do_ywr,
|
|
"write file to yaffs",
|
|
"filename value num_vlues write values to yaffs file");
|
|
|
|
U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
|
|
"read file to memory from yaffs",
|
|
"filename offset reads yaffs file into memory");
|
|
|
|
U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
|
|
"write file from memory to yaffs",
|
|
"filename offset size writes memory to yaffs file");
|
|
|
|
U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
|
|
"YAFFS mkdir", "dir create a yaffs directory");
|
|
|
|
U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
|
|
"YAFFS rmdir", "dirname removes a yaffs directory");
|
|
|
|
U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path removes a yaffs file");
|
|
|
|
U_BOOT_CMD(ymv, 4, 0, do_ymv,
|
|
"YAFFS mv",
|
|
"old_path new_path moves/rename files within a yaffs mount point");
|