README.ubi 6.54 KB
Newer Older
Stefan Roese's avatar
Stefan Roese committed
1 2 3 4
-------------------
UBI usage in U-Boot
-------------------

5 6
UBI support in U-Boot is broken down into five separate commands.
The first is the ubi command, which has six subcommands:
Stefan Roese's avatar
Stefan Roese committed
7 8 9 10 11 12 13 14 15 16

=> 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
17 18
ubi write.part address volume size [fullsize]
 - Write part of a volume from address
Stefan Roese's avatar
Stefan Roese committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
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
82
ubi write.part	Write data from memory to UBI volume, in parts
Stefan Roese's avatar
Stefan Roese committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148


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
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190


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
191 192
	    17442  Thu Jan 01 02:57:38 1970  imx28-evk.dtb
	  2998146  Thu Jan 01 02:57:43 1970  zImage
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225


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!