1、内核选项支持,
驱动选项如下:
Device Drivers --->
< * > Memory Technology Device (MTD) Support --->
.........
< * > Enable UBI - Unsorted block images --->
文件系统选项如下:
File systems ---->
...........
[ * ] Miscellaneous filesystems --->
.........
< * > UBIFS file system support
2、制作根文件系统
制作ubifs根文件系统需要有mkfs.ubifs命令,联网直接安装 mtd-utils 即可。
第一步,执行:
mkfs.ubifs -F -r yourrootfs -m 2048 -e 126976 -c 2047 -o ubifs.img
参数意义:
-F : --space-fixup ,
-q :
-r : --root=DIR 根文件系统,输入文件。
-m : --min-io-size=SIZE, 最小的输入输出大小,一般是Page size。
-e : --leb-size=SIZE 逻辑擦除块的大小,
-c : --max-leb-cnt=SIZE 最大的可擦除逻辑块的数量
-o : --out-put=FILE 输出文件
第二步,执行:
ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg
参数意义:
-o : --output, 输出文件
-m : --min-io-size= 最小的输入输出单元大小
-p : --peb-size 物理上flash的最小擦除块的大小
最后跟上配置文件 ubinize.cfg
文件内容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
mode=ubi ,制作的该分区为Ubifs
image=ubifs.img, 输入文件是ubifs.img,即上一步的输出文件
vol_id=0, 该分区的id
vol_size ,该分区的大小
vol_name,该分区的名字,和内核的内部的参数一致
vol_flags=autoresize,自动确定大小
最后生成的 ubi.img 即直接可以烧录的根文件系统。
3、修改内核参数
添加内核参数如下:
“noinitrd ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs ”
或者
“noinitrd ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs rootflags=sync”
命令行参数如果没有rootflags=sync,可能会容易造成意外断电文件丢失的情况,添加rootflags=sync 告诉内核以同步的方式挂载根文件系统。不过会稍影响文件系统的性能。
总结:
ubifs根文件系统启动速度跟Flash大小无关,启动-F参数,即第一次启动的时候会修复空白空间,会稍微耗时一点,之后的启动不在耗时。yaffs2文件系统的挂载时间跟Flash的大小成线性关系,即Flash越大挂载时间越长。