UBI文件系统的使用有两种方式
1. 通过板子自带的ubi系列命令进行格式化,关联,参数指定,挂载。以下为常用的ubi系列命令Ubiattach、 ubidetach、ubimkvol、ubiformat、ubirmvol。
使用步骤如下:
Ubiformat /dev/mtd5 //格式化mtd5分区,不使用-s 指定大小,使用默认的,不然下面的attach也许用-O指定大小
ubiattach /dev/ubi_ctrl -m 5 //关联mtd5分区,此时一般会在/dev下创建一个ubix(x是数字)的文件,作为关联文件
ubimkvol /dev/ubix -s 60MiB -N name //为新创建的分区,设置大小以及标识名
mount -t ubifs -o no_chk_data_crc ubix_0 /mnt/nand //挂载分区到指定目录
2. 通过mkfs.ubifs、ubinize工具制作镜像,直接烧录到flash
1).先制作镜像
./UBIFS_tools/mkfs.ubifs -r opt -m 2048 -e 129024 -c 487 -oapp.img
-r opt 指定镜像目录
-m 2048 最小单元
-e 129024 逻辑擦除大小,通过ubi族命令可以看到该值,比如用format,attach先看看该值
-c 487 多少个126k
[ 12.510000] UBI: attaching mtd5 to ubi1
[ 12.520000] UBI: physical eraseblock size: 131072 bytes (128 KiB)
[ 12.520000] UBI: logical eraseblocksize: 129024 bytes
[ 12.530000] UBI: smallest flash I/Ounit: 2048
[ 12.530000] UBI: sub-page size: 512
[ 12.540000] UBI: VID header offset: 512 (aligned 512)
2).ubi信息写入
./UBIFS_tools/ubinize -o appfs.img-m 2048 -p 128KiB -s 512 ./UBIFS_tools/ubinize-app.cfg
ubinize-app.cfg文件内容如下;
[app]
mode=ubi
image=app.img
vol_id=0
vol_size=60MiB
vol_type=dynamic
vol_name=app
vol_flags=autoresize
3). Uboot烧写到flash
按照内核中的分区地址,以及mtd大小,将镜像烧写到指定位置,以及指定大小
nandecc hw 2;mw.b 0x81000000 0xFF0x04000000;tftp 0x81000000 appfs.img;nand erase 0x46c0000 0x4000000;nand write0x81000000 0x046C0000 0x940000
4).挂载
启动之后,执行ubiattach,以及mount即可实现挂载
ubiattach /dev/ubi_ctrl -m 5
mount -t ubifs -ono_chk_data_crc ubi1_0 /opt
5).系统下烧写
可以使用flash_eraseall指定分区,将分区内容擦除,然后使用flashcp将制作好的镜像拷贝到指定分区。擦除与拷贝过程中,可以不卸载指定分区。