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

UBI support in U-Boot is broken down into five separate commands.
The first is the ubi command, which has six subcommands:

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


Next, the ubifsmount command allows you to access filesystems on the
UBI partition which has been attached with the ubi part command:

=> help ubifsmount
ubifsmount - mount UBIFS volume

Usage:
ubifsmount <volume-name>
    - mount 'volume-name' volume

For example:

=> ubifsmount ubi0:recovery
UBIFS: mounted UBI device 0, volume 0, name "recovery"
UBIFS: mounted read-only
UBIFS: file system size:   46473216 bytes (45384 KiB, 44 MiB, 366 LEBs)
UBIFS: journal size:       6348800 bytes (6200 KiB, 6 MiB, 50 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: LZO
UBIFS: reserved for root:  0 bytes (0 KiB)

Note that unlike Linux, U-Boot can only have one active UBI partition
at a time, which can be referred to as ubi0, and must be supplied along
with the name of the filesystem you are mounting.


Once a UBI filesystem has been mounted, the ubifsls command allows you
to list the contents of a directory in the filesystem:


=> help ubifsls
ubifsls - list files in a directory

Usage:
ubifsls [directory]
    - list files in a 'directory' (default '/')

For example:

=> ubifsls
            17442  Thu Jan 01 02:57:38 1970  imx28-evk.dtb
          2998146  Thu Jan 01 02:57:43 1970  zImage


And the ubifsload command allows you to load a file from a UBI
filesystem:


=> help ubifsload
ubifsload - load file from an UBIFS filesystem

Usage:
ubifsload <addr> <filename> [bytes]
    - load file 'filename' to address 'addr'

For example:

=> ubifsload ${loadaddr} zImage
Loading file 'zImage' to addr 0x42000000 with size 2998146 (0x002dbf82)...
Done


Finally, you can unmount the UBI filesystem with the ubifsumount
command:

=> help ubifsumount
ubifsumount - unmount UBIFS volume

Usage:
ubifsumount     - unmount current volume

For example:

=> ubifsumount
Unmounting UBIFS volume recovery!
