-------------------
UBI usage in U-Boot
-------------------

Here the list of the currently implemented UBI commands:

=> help ubi
ubi - ubi commands

Usage:
ubi part [part] [offset]
 - Show or set current partition (with optional VID header offset)
ubi info [l[ayout]] - Display volume and ubi layout information
ubi create[vol] volume [size] [type] - create volume name with size
ubi write[vol] address volume size - Write volume from address with size
ubi read[vol] address volume [size] - Read volume to address with size
ubi remove[vol] volume - Remove volume
[Legends]
 volume: character name
 size: specified in bytes
 type: s[tatic] or d[ynamic] (default=dynamic)


The first command that is needed to be issues is "ubi part" to connect
one mtd partition to the UBI subsystem. This command will either create
a new UBI device on the requested MTD partition. Or it will attach a
previously created UBI device. The other UBI commands will only work
when such a UBI device is attached (via "ubi part"). Here an example:

=> mtdparts

device nor0 <1fc000000.nor_flash>, # parts = 6
 #: name                size            offset          mask_flags
 0: kernel              0x00200000      0x00000000      0
 1: dtb                 0x00040000      0x00200000      0
 2: root                0x00200000      0x00240000      0
 3: user                0x01ac0000      0x00440000      0
 4: env                 0x00080000      0x01f00000      0
 5: u-boot              0x00080000      0x01f80000      0

active partition: nor0,0 - (kernel) 0x00200000 @ 0x00000000

defaults:
mtdids  : nor0=1fc000000.nor_flash
mtdparts: mtdparts=1fc000000.nor_flash:2m(kernel),256k(dtb),2m(root),27392k(user),512k(env),512k(u-boot)

=> ubi part root
Creating 1 MTD partitions on "nor0":
0x000000240000-0x000000440000 : "mtd=2"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   262144 bytes (256 KiB)
UBI: logical eraseblock size:    262016 bytes
UBI: smallest flash I/O unit:    1
UBI: VID header offset:          64 (aligned 64)
UBI: data offset:                128
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=2"
UBI: MTD device size:            2 MiB
UBI: number of good PEBs:        8
UBI: number of bad PEBs:         0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 8
UBI: number of PEBs reserved for bad PEB handling: 0
UBI: max/mean erase counter: 2/1


Now that the UBI device is attached, this device can be modified
using the following commands:

ubi info	Display volume and ubi layout information
ubi createvol	Create UBI volume on UBI device
ubi removevol	Remove UBI volume from UBI device
ubi read	Read data from UBI volume to memory
ubi write	Write data from memory to UBI volume


Here a few examples on the usage:

=> ubi create testvol
Creating dynamic volume testvol of size 1048064

=> ubi info l
UBI: volume information dump:
UBI: vol_id          0
UBI: reserved_pebs   4
UBI: alignment       1
UBI: data_pad        0
UBI: vol_type        3
UBI: name_len        7
UBI: usable_leb_size 262016
UBI: used_ebs        4
UBI: used_bytes      1048064
UBI: last_eb_bytes   262016
UBI: corrupted       0
UBI: upd_marker      0
UBI: name            testvol

UBI: volume information dump:
UBI: vol_id          2147479551
UBI: reserved_pebs   2
UBI: alignment       1
UBI: data_pad        0
UBI: vol_type        3
UBI: name_len        13
UBI: usable_leb_size 262016
UBI: used_ebs        2
UBI: used_bytes      524032
UBI: last_eb_bytes   2
UBI: corrupted       0
UBI: upd_marker      0
UBI: name            layout volume

=> ubi info
UBI: MTD device name:            "mtd=2"
UBI: MTD device size:            2 MiB
UBI: physical eraseblock size:   262144 bytes (256 KiB)
UBI: logical eraseblock size:    262016 bytes
UBI: number of good PEBs:        8
UBI: number of bad PEBs:         0
UBI: smallest flash I/O unit:    1
UBI: VID header offset:          64 (aligned 64)
UBI: data offset:                128
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 8
UBI: number of PEBs reserved for bad PEB handling: 0
UBI: max/mean erase counter: 4/1

=> ubi write 800000 testvol 80000
Volume "testvol" found at volume id 0

=> ubi read 900000 testvol 80000
Volume testvol found at volume id 0
read 524288 bytes from volume 0 to 900000(buf address)

=> cmp.b 800000 900000 80000
Total of 524288 bytes were the same
