Blame view

common/cmd_ubifs.c 3.82 KB
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  /*
   * (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 <common.h>
  #include <config.h>
  #include <command.h>
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
35
  #include "../fs/ubifs/ubifs.h"
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
36
37
  static int ubifs_initialized;
  static int ubifs_mounted;
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
38
  extern struct super_block *ubifs_sb;
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
39
40
41
  /* Prototypes */
  int ubifs_init(void);
  int ubifs_mount(char *vol_name);
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
42
  void ubifs_umount(struct ubifs_info *c);
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
43
44
  int ubifs_ls(char *dir_name);
  int ubifs_load(char *filename, u32 addr, u32 size);
54841ab50   Wolfgang Denk   Make sure that ar...
45
  int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
46
47
48
  {
  	char *vol_name;
  	int ret;
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
49
  	if (argc != 2)
4c12eeb8b   Simon Glass   Convert cmd_usage...
50
  		return CMD_RET_USAGE;
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
51

ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  	vol_name = argv[1];
  	debug("Using volume %s
  ", 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;
  }
2f15cfd18   Stefan Roese   UBI/UBIFS: Automa...
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  int ubifs_is_mounted(void)
  {
  	return ubifs_mounted;
  }
  
  void cmd_ubifs_umount(void)
  {
  
  	if (ubifs_sb) {
  		printf("Unmounting UBIFS volume %s!
  ",
  		       ((struct ubifs_info *)(ubifs_sb->s_fs_info))->vi.name);
  		ubifs_umount(ubifs_sb->s_fs_info);
  	}
  
  	ubifs_sb = NULL;
  	ubifs_mounted = 0;
  	ubifs_initialized = 0;
  }
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
88
89
90
  int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
  	if (argc != 1)
4c12eeb8b   Simon Glass   Convert cmd_usage...
91
  		return CMD_RET_USAGE;
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
92
93
94
95
96
97
  
  	if (ubifs_initialized == 0) {
  		printf("No UBIFS volume mounted!
  ");
  		return -1;
  	}
2f15cfd18   Stefan Roese   UBI/UBIFS: Automa...
98
  	cmd_ubifs_umount();
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
99
100
101
  
  	return 0;
  }
54841ab50   Wolfgang Denk   Make sure that ar...
102
  int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
103
104
105
106
107
  {
  	char *filename = "/";
  	int ret;
  
  	if (!ubifs_mounted) {
9a2ea578b   Stefan Roese   UBIFS: Change "ub...
108
109
  		printf("UBIFS not mounted, use ubifsmount to mount volume first!
  ");
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
  		return -1;
  	}
  
  	if (argc == 2)
  		filename = argv[1];
  	debug("Using filename %s
  ", filename);
  
  	ret = ubifs_ls(filename);
  	if (ret)
  		printf("%s not found!
  ", filename);
  
  	return ret;
  }
54841ab50   Wolfgang Denk   Make sure that ar...
125
  int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
126
127
  {
  	char *filename;
2896b5851   Simon Kagstrom   Command improveme...
128
  	char *endp;
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
129
130
131
132
133
134
135
136
137
  	int ret;
  	u32 addr;
  	u32 size = 0;
  
  	if (!ubifs_mounted) {
  		printf("UBIFS not mounted, use ubifs mount to mount volume first!
  ");
  		return -1;
  	}
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
138
  	if (argc < 3)
4c12eeb8b   Simon Glass   Convert cmd_usage...
139
  		return CMD_RET_USAGE;
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
140

2896b5851   Simon Kagstrom   Command improveme...
141
  	addr = simple_strtoul(argv[1], &endp, 16);
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
142
  	if (endp == argv[1])
4c12eeb8b   Simon Glass   Convert cmd_usage...
143
  		return CMD_RET_USAGE;
2896b5851   Simon Kagstrom   Command improveme...
144

ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
145
  	filename = argv[2];
2896b5851   Simon Kagstrom   Command improveme...
146
147
  	if (argc == 4) {
  		size = simple_strtoul(argv[3], &endp, 16);
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
148
  		if (endp == argv[3])
4c12eeb8b   Simon Glass   Convert cmd_usage...
149
  			return CMD_RET_USAGE;
2896b5851   Simon Kagstrom   Command improveme...
150
  	}
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
151
152
153
154
155
156
157
158
159
160
161
162
163
  	debug("Loading file '%s' to address 0x%08x (size %d)
  ", filename, addr, size);
  
  	ret = ubifs_load(filename, addr, size);
  	if (ret)
  		printf("%s not found!
  ", filename);
  
  	return ret;
  }
  
  U_BOOT_CMD(
  	ubifsmount, 2, 0, do_ubifs_mount,
852dbfdd5   Mike Frysinger   more command usag...
164
  	"mount UBIFS volume",
2896b5851   Simon Kagstrom   Command improveme...
165
166
167
  	"<volume-name>
  "
  	"    - mount 'volume-name' volume"
a89c33db9   Wolfgang Denk   General help mess...
168
  );
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
169

388a29d02   Frans Meulenbroeks   various cmd_* fil...
170
  U_BOOT_CMD(
cb9c09d48   Stefan Roese   UBIFS: Add ubifsu...
171
172
173
174
175
176
  	ubifsumount, 1, 0, do_ubifs_umount,
  	"unmount UBIFS volume",
  	"    - unmount current volume"
  );
  
  U_BOOT_CMD(
388a29d02   Frans Meulenbroeks   various cmd_* fil...
177
  	ubifsls, 2, 0, do_ubifs_ls,
a89c33db9   Wolfgang Denk   General help mess...
178
179
180
181
182
  	"list files in a directory",
  	"[directory]
  "
  	"    - list files in a 'directory' (default '/')"
  );
ce6d0c8de   Stefan Roese   UBIFS: Add UBIFS ...
183

388a29d02   Frans Meulenbroeks   various cmd_* fil...
184
185
  U_BOOT_CMD(
  	ubifsload, 4, 0, do_ubifs_load,
a89c33db9   Wolfgang Denk   General help mess...
186
187
188
189
190
  	"load file from an UBIFS filesystem",
  	"<addr> <filename> [bytes]
  "
  	"    - load file 'filename' to address 'addr'"
  );