UBI基础

参考源头:
http://www.linux-mtd.infradead.org/doc/ubi.html
http://www.linux-mtd.infradead.org/doc/ubifs.html

工具的编译使用:

  1. 在http://git.infradead.org/mtd-utils.git上下载最新的mtd-utils代码, 下面是以2009-07-03的代码为例。
  2. 解压缩mtd-utils.tgz
  3. cd mtd-utils,编辑common.mk: 增加CROSS=arm-linux-
  4. 执行make即可。

在mtd-utils中生成的主要工具有:

(1) flash_eraseall, 用于擦除指定的MTD分区, 用法如下:
./flash_eraseall /dev/mtd1 擦除MTD1
./flash_eraseall -j /dev/mtd1 擦除MTD1并将其格式化为JFFS2

(2) nanddump, 打印(或保存)NAND中的内容,用法如下:
./nanddump -s 0 -l 8024 -f result.dat /dev/mtd1 将mtd1中从地址0开始的8024长度的内容保存到result.dat中,(缺省的,包含OOB的内容)
注意,用vi或vim查看result.dat的内容时是2进制,在命令模式下,输入%!xxd即可转换为十六进制的可读内容。

在mtd-utils/ubi-utils中生成的工具是针对UBIFS的,包含:

(1)mtdinfo: 输出指定的mtd分区的信息, 该命令只对可读的设备分区有效。

用法: ./mtdinfo /dev/mtd1

(2)ubinfo: 输出指定的ubi设备的信息,不带参数时,输出系统所有的ubi设备以及ubi控制设备信息。ubi控制设备即/dev/ubi_ctrl是一个字符设备,在后面还将用到。

用法:./ubinfo

  ./ubinfo /dev/ubi0

(3)ubiformat:格式化指定的mtd分区, 参数使用的是mtd的字符设备

用法:./ubiformat /dev/mtd1

(4)ubiattach:将指定的mtd分区关联到ubi上

用法:./ubiattach /dev/ubi_ctrl -m 1, 将mtd1关连ubi

ubiattach -h
ubiattach version 2.1.1 - a tool to attach MTD device to UBI.

Usage: ubiattach []
[-m ] [-d ] [-p ]
[–mtdn=] [–devn=]
[–dev-path= ]
[–max-beb-per1024=<maximum bad block number per 1024 blocks>]
UBI control device defaults to /dev/ubi_ctrl if not supplied.
Example 1: ubiattach -p /dev/mtd0 - attach /dev/mtd0 to UBI
Example 2: ubiattach -m 0 - attach MTD device 0 (mtd0) to UBI
Example 3: ubiattach -m 0 -d 3 - attach MTD device 0 (mtd0) to UBI
and create UBI device number 3 (ubi3)
Example 4: ubiattach -m 1 -b 25 - attach /dev/mtd1 to UBI and reserve
25*C/1024 eraseblocks for bad block handling, where C is the flash
is total flash chip eraseblocks count, that is flash chip size in
eraseblocks (including bad eraseblocks). E.g., if the flash chip
has 4096 PEBs, 100 will be reserved.

-d, --devn= the number to assign to the newly created UBI device
(assigned automatically if this is not specified)
-p, --dev-path= path to MTD device node to attach
-m, --mtdn= MTD device number to attach (alternative method, e.g
if the character device node does not exist)
-O, --vid-hdr-offset VID header offset (do not specify this unless you really
know what you are doing, the default should be optimal)
-b, – max-beb-per1024 maximum expected bad block number per 1024 eraseblock.
The default value is correct for most NAND devices.
Allowed range is 0-768, 0 means the default kernel value.
-h, --help print help message
-V, --version print program version

内核配置最大坏块数:max-beb-per1024的默认值为内核配置:
CONFIG_MTD_UBI_BEB_LIMIT
在这里插入图片描述

(5)ubidetach:解除mtd与ubi的关联

用法:./ubidetach /dev/ubi_ctrl -m 1

(6)ubimkvol:创建一个voluem,volume才是最终用户挂载文件系统的地方。

用法:在ubi2上创建4个olume,每个大小是20M, 名字分别为my_vol_a, my_vol_b, my_vol_c, my_vol_d.

./ubimkvol /dev/ubi2 -s 20Mib -N my_vol_a

./ubimkvol /dev/ubi2 -s 20Mib -N my_vol_b

./ubimkvol /dev/ubi2 -s 20Mib -N my_vol_c

./ubimkvol /dev/ubi2 -s 20Mib -N my_vol_d

(7)ubirename: 更改ubi某个volume的名字,或者完成两个volume的互换

用法:

(1)将ubi2上名字为my_vol_a的volume名字改为my_vol_newname

./ubirename /dev/ubi2 my_vol_a my_vol_newname

(2)将ubi2上名字为my_vol_b和my_vol_c的两个volume互换,

./ubirename /dev/ubi2 my_vol_b my_vol_c my_vol_c my_vol_b

(8)ubirmvol: 删除某个volume,可以通过名字或id指定具体的volume

用法: ./ubirmvol /dev/ubi2 -n 1
或./ubirmvol /dev/ubi2 -N my_vol_d

(9)ubinize: 创建ubi image。

用法: ./ubinize -o myubi.img -p 126976 -m 2048 my.ini

其中, -p, 指定的是目标flash的physical eraseblock的大小

   -s, 指定的是目标flash的minimum input/output unit 的大小, 这两个参数的值可以通过“cat /sys/class/ubi/ubi2/*”得到

   my.ini是配置文件,其中指定了原文件,目标volume的大小、名字等。其格式如小:

[jffs2-volume]
mode=ubi
image=…/jffs2.img
vol_id=1
vol_size=30MiB
vol_type=dynamic
vol_name=jffs2_volume
vol_flags=autoresize
vol_alignment=1

(10)ubiupdatevol: 向指定的volume上写数据

用法:./ubiupdatevol /dev/ubi2_0 myubi.img

UBI文件系统:
详细说明参考:http://www.linux-mtd.infradead.org/doc/ubifs.html
其中涉及可以提高UBI文件系统可用率的:
UBIFS 支持 LZO 和 zlib 压缩算法。 Zlib 提供了更好的压缩比,但 LZO 在压缩和解压方面都更快。
LZO 是 UBIFS 和 mkfs.ubifs 实用程序的默认压缩算法。
可以使用“-x none”mkfs.ubifs 选项完全禁用UBIFS压缩。

Flash space overhead:
此章节有介绍UBI删除开销后,可用空间的计算方法

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值