yaffs2.c 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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. #include <common.h>
  16. #include <config.h>
  17. #include <command.h>
  18. #ifdef YAFFS2_DEBUG
  19. #define PRINTF(fmt, args...) printf(fmt, ##args)
  20. #else
  21. #define PRINTF(fmt, args...) do { } while (0)
  22. #endif
  23. extern void cmd_yaffs_dev_ls(void);
  24. extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
  25. extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
  26. int start_block, int end_block);
  27. extern void cmd_yaffs_mount(char *mp);
  28. extern void cmd_yaffs_umount(char *mp);
  29. extern void cmd_yaffs_read_file(char *fn);
  30. extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
  31. extern void cmd_yaffs_ls(const char *mountpt, int longlist);
  32. extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
  33. extern void cmd_yaffs_mread_file(char *fn, char *addr);
  34. extern void cmd_yaffs_mkdir(const char *dir);
  35. extern void cmd_yaffs_rmdir(const char *dir);
  36. extern void cmd_yaffs_rm(const char *path);
  37. extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
  38. extern int yaffs_dump_dev(const char *path);
  39. /* ytrace - show/set yaffs trace mask */
  40. int do_ytrace(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  41. {
  42. if (argc > 1)
  43. cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
  44. else
  45. cmd_yaffs_tracemask(0, 0);
  46. return 0;
  47. }
  48. /* ydevls - lists yaffs mount points. */
  49. int do_ydevls(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  50. {
  51. cmd_yaffs_dev_ls();
  52. return 0;
  53. }
  54. /* ydevconfig mount_pt mtd_dev_num start_block end_block */
  55. int do_ydevconfig(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  56. {
  57. char *mtpoint;
  58. int mtd_dev;
  59. int start_block;
  60. int end_block;
  61. if (argc != 5) {
  62. printf
  63. ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
  64. return -1;
  65. }
  66. mtpoint = argv[1];
  67. mtd_dev = simple_strtol(argv[2], NULL, 16);
  68. start_block = simple_strtol(argv[3], NULL, 16);
  69. end_block = simple_strtol(argv[4], NULL, 16);
  70. cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
  71. return 0;
  72. }
  73. int do_ymount(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  74. {
  75. char *mtpoint;
  76. if (argc != 2) {
  77. printf("Bad arguments: ymount mount_pt\n");
  78. return -1;
  79. }
  80. mtpoint = argv[1];
  81. printf("Mounting yaffs2 mount point %s\n", mtpoint);
  82. cmd_yaffs_mount(mtpoint);
  83. return 0;
  84. }
  85. int do_yumount(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  86. {
  87. char *mtpoint;
  88. if (argc != 2) {
  89. printf("Bad arguments: yumount mount_pt\n");
  90. return -1;
  91. }
  92. mtpoint = argv[1];
  93. printf("Unmounting yaffs2 mount point %s\n", mtpoint);
  94. cmd_yaffs_umount(mtpoint);
  95. return 0;
  96. }
  97. int do_yls(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  98. {
  99. char *dirname;
  100. if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
  101. printf("Bad arguments: yls [-l] dir\n");
  102. return -1;
  103. }
  104. dirname = argv[argc - 1];
  105. cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
  106. return 0;
  107. }
  108. int do_yrd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  109. {
  110. char *filename;
  111. if (argc != 2) {
  112. printf("Bad arguments: yrd file_name\n");
  113. return -1;
  114. }
  115. filename = argv[1];
  116. printf("Reading file %s ", filename);
  117. cmd_yaffs_read_file(filename);
  118. printf("done\n");
  119. return 0;
  120. }
  121. int do_ywr(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  122. {
  123. char *filename;
  124. ulong value;
  125. ulong numValues;
  126. if (argc != 4) {
  127. printf("Bad arguments: ywr file_name value n_values\n");
  128. return -1;
  129. }
  130. filename = argv[1];
  131. value = hextoul(argv[2], NULL);
  132. numValues = hextoul(argv[3], NULL);
  133. printf("Writing value (%lx) %lx times to %s... ", value, numValues,
  134. filename);
  135. cmd_yaffs_write_file(filename, value, numValues);
  136. printf("done\n");
  137. return 0;
  138. }
  139. int do_yrdm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  140. {
  141. char *filename;
  142. ulong addr;
  143. if (argc != 3) {
  144. printf("Bad arguments: yrdm file_name addr\n");
  145. return -1;
  146. }
  147. filename = argv[1];
  148. addr = hextoul(argv[2], NULL);
  149. cmd_yaffs_mread_file(filename, (char *)addr);
  150. return 0;
  151. }
  152. int do_ywrm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  153. {
  154. char *filename;
  155. ulong addr;
  156. ulong size;
  157. if (argc != 4) {
  158. printf("Bad arguments: ywrm file_name addr size\n");
  159. return -1;
  160. }
  161. filename = argv[1];
  162. addr = hextoul(argv[2], NULL);
  163. size = hextoul(argv[3], NULL);
  164. cmd_yaffs_mwrite_file(filename, (char *)addr, size);
  165. return 0;
  166. }
  167. int do_ymkdir(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  168. {
  169. char *dirname;
  170. if (argc != 2) {
  171. printf("Bad arguments: ymkdir dir_name\n");
  172. return -1;
  173. }
  174. dirname = argv[1];
  175. cmd_yaffs_mkdir(dirname);
  176. return 0;
  177. }
  178. int do_yrmdir(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  179. {
  180. char *dirname;
  181. if (argc != 2) {
  182. printf("Bad arguments: yrmdir dir_name\n");
  183. return -1;
  184. }
  185. dirname = argv[1];
  186. cmd_yaffs_rmdir(dirname);
  187. return 0;
  188. }
  189. int do_yrm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  190. {
  191. char *name;
  192. if (argc != 2) {
  193. printf("Bad arguments: yrm name\n");
  194. return -1;
  195. }
  196. name = argv[1];
  197. cmd_yaffs_rm(name);
  198. return 0;
  199. }
  200. int do_ymv(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  201. {
  202. char *oldPath;
  203. char *newPath;
  204. if (argc != 3) {
  205. printf("Bad arguments: ymv old_path new_path\n");
  206. return -1;
  207. }
  208. oldPath = argv[1];
  209. newPath = argv[2];
  210. cmd_yaffs_mv(newPath, oldPath);
  211. return 0;
  212. }
  213. U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
  214. "show/set yaffs trace mask",
  215. "[new_mask] show/set yaffs trace mask");
  216. U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
  217. "list yaffs mount points", "list yaffs mount points");
  218. U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
  219. "configure yaffs mount point",
  220. "mtpoint mtd_id start_block end_block configures a yaffs2 mount point");
  221. U_BOOT_CMD(ymount, 2, 0, do_ymount,
  222. "mount yaffs", "mtpoint mounts a yaffs2 mount point");
  223. U_BOOT_CMD(yumount, 2, 0, do_yumount,
  224. "unmount yaffs", "mtpoint unmounts a yaffs2 mount point");
  225. U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname");
  226. U_BOOT_CMD(yrd, 2, 0, do_yrd,
  227. "read file from yaffs", "path read file from yaffs");
  228. U_BOOT_CMD(ywr, 4, 0, do_ywr,
  229. "write file to yaffs",
  230. "filename value num_vlues write values to yaffs file");
  231. U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
  232. "read file to memory from yaffs",
  233. "filename offset reads yaffs file into memory");
  234. U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
  235. "write file from memory to yaffs",
  236. "filename offset size writes memory to yaffs file");
  237. U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
  238. "YAFFS mkdir", "dir create a yaffs directory");
  239. U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
  240. "YAFFS rmdir", "dirname removes a yaffs directory");
  241. U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path removes a yaffs file");
  242. U_BOOT_CMD(ymv, 4, 0, do_ymv,
  243. "YAFFS mv",
  244. "old_path new_path moves/rename files within a yaffs mount point");