-------------------
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