static struct selected_dev ubi_dev;
#ifdef CONFIG_CMD_UBIFS
-int ubifs_is_mounted(void);
-void cmd_ubifs_umount(void);
+#include <ubifs_uboot.h>
#endif
static void display_volume_info(struct ubi_device *ubi)
return ENODEV;
rsvd_bytes = vol->reserved_pebs * (ubi->leb_size - vol->data_pad);
- if (size < 0 || size > rsvd_bytes) {
+ if (size > rsvd_bytes) {
printf("size > volume size! Aborting!\n");
return EINVAL;
}
unsigned long long tmp;
struct ubi_volume *vol;
loff_t offp = 0;
+ size_t len_read;
vol = ubi_find_volume(volume);
if (vol == NULL)
size = vol->used_bytes;
}
+ printf("Read %zu bytes from volume %s to %p\n", size, volume, buf);
+
if (vol->corrupted)
printf("read from corrupted volume %d", vol->vol_id);
if (offp + size > vol->used_bytes)
tmp = offp;
off = do_div(tmp, vol->usable_leb_size);
lnum = tmp;
+ len_read = size;
do {
if (off + len >= vol->usable_leb_size)
len = vol->usable_leb_size - off;
len = size > tbuf_size ? tbuf_size : size;
} while (size);
+ if (!size)
+ env_set_hex("filesize", len_read);
+
free(tbuf);
return err;
}
vid_header_offset);
if (err) {
printf("UBI init error %d\n", err);
+ printf("Please check, if the correct MTD partition is used (size big enough?)\n");
ubi_dev.selected = 0;
return err;
}
}
/* E.g., create volume size */
if (argc == 4) {
- size = simple_strtoull(argv[3], NULL, 16);
+ if (argv[3][0] != '-')
+ size = simple_strtoull(argv[3], NULL, 16);
argc--;
}
/* Use maximum available size */
}
if (argc == 3) {
- printf("Read %lld bytes from volume %s to %lx\n", size,
- argv[3], addr);
-
return ubi_volume_read(argv[3], (char *)addr, size);
}
}
" - Display volume and ubi layout information\n"
"ubi check volumename"
" - check if volumename exists\n"
- "ubi create[vol] volume [size] [type] [id]"
- " - create volume name with size\n"
+ "ubi create[vol] volume [size] [type] [id]\n"
+ " - create volume name with size ('-' for maximum"
+ " available size)\n"
"ubi write[vol] address volume size"
" - Write volume from address with size\n"
"ubi write.part address volume size [fullsize]\n"