Blame view
common/cmd_ubifs.c
3.82 KB
ce6d0c8de
|
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
|
35 |
#include "../fs/ubifs/ubifs.h" |
ce6d0c8de
|
36 37 |
static int ubifs_initialized; static int ubifs_mounted; |
cb9c09d48
|
38 |
extern struct super_block *ubifs_sb; |
ce6d0c8de
|
39 40 41 |
/* Prototypes */ int ubifs_init(void); int ubifs_mount(char *vol_name); |
cb9c09d48
|
42 |
void ubifs_umount(struct ubifs_info *c); |
ce6d0c8de
|
43 44 |
int ubifs_ls(char *dir_name); int ubifs_load(char *filename, u32 addr, u32 size); |
54841ab50
|
45 |
int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
ce6d0c8de
|
46 47 48 |
{ char *vol_name; int ret; |
47e26b1bf
|
49 |
if (argc != 2) |
4c12eeb8b
|
50 |
return CMD_RET_USAGE; |
47e26b1bf
|
51 |
|
ce6d0c8de
|
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
|
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
|
88 89 90 |
int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { if (argc != 1) |
4c12eeb8b
|
91 |
return CMD_RET_USAGE; |
cb9c09d48
|
92 93 94 95 96 97 |
if (ubifs_initialized == 0) { printf("No UBIFS volume mounted! "); return -1; } |
2f15cfd18
|
98 |
cmd_ubifs_umount(); |
cb9c09d48
|
99 100 101 |
return 0; } |
54841ab50
|
102 |
int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
ce6d0c8de
|
103 104 105 106 107 |
{ char *filename = "/"; int ret; if (!ubifs_mounted) { |
9a2ea578b
|
108 109 |
printf("UBIFS not mounted, use ubifsmount to mount volume first! "); |
ce6d0c8de
|
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
|
125 |
int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
ce6d0c8de
|
126 127 |
{ char *filename; |
2896b5851
|
128 |
char *endp; |
ce6d0c8de
|
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
|
138 |
if (argc < 3) |
4c12eeb8b
|
139 |
return CMD_RET_USAGE; |
ce6d0c8de
|
140 |
|
2896b5851
|
141 |
addr = simple_strtoul(argv[1], &endp, 16); |
47e26b1bf
|
142 |
if (endp == argv[1]) |
4c12eeb8b
|
143 |
return CMD_RET_USAGE; |
2896b5851
|
144 |
|
ce6d0c8de
|
145 |
filename = argv[2]; |
2896b5851
|
146 147 |
if (argc == 4) { size = simple_strtoul(argv[3], &endp, 16); |
47e26b1bf
|
148 |
if (endp == argv[3]) |
4c12eeb8b
|
149 |
return CMD_RET_USAGE; |
2896b5851
|
150 |
} |
ce6d0c8de
|
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
|
164 |
"mount UBIFS volume", |
2896b5851
|
165 166 167 |
"<volume-name> " " - mount 'volume-name' volume" |
a89c33db9
|
168 |
); |
ce6d0c8de
|
169 |
|
388a29d02
|
170 |
U_BOOT_CMD( |
cb9c09d48
|
171 172 173 174 175 176 |
ubifsumount, 1, 0, do_ubifs_umount, "unmount UBIFS volume", " - unmount current volume" ); U_BOOT_CMD( |
388a29d02
|
177 |
ubifsls, 2, 0, do_ubifs_ls, |
a89c33db9
|
178 179 180 181 182 |
"list files in a directory", "[directory] " " - list files in a 'directory' (default '/')" ); |
ce6d0c8de
|
183 |
|
388a29d02
|
184 185 |
U_BOOT_CMD( ubifsload, 4, 0, do_ubifs_load, |
a89c33db9
|
186 187 188 189 190 |
"load file from an UBIFS filesystem", "<addr> <filename> [bytes] " " - load file 'filename' to address 'addr'" ); |