1.配置ubi and ubifs
in .config
CONFIG_MTD_UBI=y
CONFIG_UBIFS_FS=y
CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_LZO=y CONFIG_CRC16=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y
注意:如果配置成模块(=m),则可以手动加载
2.manual attach/detach ubi to mtd
./ubiattach /dev/ubi_ctrl -m mtdnumber
./ubidetaach /dev/ubi_ctrl -m mtdnumber
3.manual create ubi volume
./ubimkvol /dev/ubi_device_number -s size -N name
like:
./ubimkvol /dev/ubi0 -s 300MiB -N ubifs1
4.mount ubifs volume
mount -t ubifs ubi0:ubifs1 /tmp/ubifs1
5.ubi node and ubi_ctrl node
#cat /sys/class/misc/ubi_ctrl/dev
10:63
加入/dev下没有ubi_ctrl,则我们可以sudo mknod ubi_ctrl c 10 63创建一个端点
#./ubiattach /dev/ubi_ctrl -m 6
#cat /sys/class/ubi/ubi0/dev
252:0
当我们attach ubi0 to mtd6后,如果/dev下没有ubi0,则创建一个,sudo mknod ubi0 c 252 0
6.我们可以手动create volume,然后手动mount ubifs,也可以在PC上创建ubi.img(创建好volume,volume写有数据)烧录进mtd device
How to generate ubi image and write to mtd device
./mkfs.ubifs -r a205_rootdisk -m 4096 -e 516096 -c 40 -o ubifs.img
./ubinize -o ubi.img -m 4096 -p 512KiB ubinize.cfg
./ubiformat -q /dev/mtd5 -f ubi.img
-m minimum I/O unit size
-e maximum logical erase block count
-c maximum logical erase block count
-x compression type - "lzo", "favor_lzo", "zlib" or "none" (default: "lzo")
-p size of the physical eraseblock of the flash this UBI image is created for in bytes,
注意:在PC上ubuntu使用mkfs.ubifs and ubinize,则我们要用普通的gcc来编译它们,同时在ubuntu上装上lzo库:sudo apt-get install liblzo2-dev
附录:
1).ubinize.cfg
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=500MiB
vol_type=dynamic //if vol_type=static, then ubi volume is read only
vol_name=ubifs0
vol_flags=autoresize
这样这样当./ubiattach /dev/ubi_ctrl -m n后,就可以mount -t ubifs ubi0:ubifs0 /tmp
2)如果是想mount crafms image,只要
./ubinize -o ubi.img -m 4096 -p 512KiB ubinize.cfg
./ubiformat -q /dev/mtd5 -f ubi.img
ubinize.cfg
[ubifs]
mode=ubi
image=cramfs.img
vol_id=0
vol_size=500MiB
vol_type=dynamic
vol_name=cramfs
vol_flags=autoresize
这样当./ubiattach /dev/ubi_ctrl -m n后就可以从cat /proc/mtd中看到一个ubi volume仿真的mtd device,我们只要mount这个mtd设备对应的mtdblock就可以了(如mount -t cramfs /dev/mtdblock10 /tmp),注意,既然是烧录了cramfs到ubi volume,则我们只能以cramfs方式mount这个volume,不能再以ubifs方式(mount -t ubifs ubi0:cramfs /tmp)mount这个volume.但如果我们用./ubiupdate /dev/ubi0