mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-11-03 01:41:44 +01:00 
			
		
		
		
	Signed-off-by: Wolfgang Denk <wd@denx.de> [trini: Drop changes for PEP 4 following python tools] Signed-off-by: Tom Rini <trini@ti.com>
		
			
				
	
	
		
			226 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
-------------------
 | 
						|
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 write.part address volume size [fullsize]
 | 
						|
 - Write part of a volume from address
 | 
						|
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
 | 
						|
ubi write.part	Write data from memory to UBI volume, in parts
 | 
						|
 | 
						|
 | 
						|
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!
 |