UBI 文件系统制作
在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs、jffs2、yaffs2等文件系统。它们也都是基于文件系
统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。这里简单介绍下UBI文件系统制作,可能有理解不对的地方,也请指正
话不多说,UBI 好处:文件系统压缩率大,制作同样容量的文件系统,使用ubi格式,占用flash会更小,节省更多的硬件资源
操作步骤:
1、工具
mtd-utils(
必须用到),需要用到下列依赖库:
<1>
zlib 库
编译方法:CC=arm-arago-linux-gnueabi-gcc ./configure --shared --prefix=XXXXX (--prefix=XXXXX 指定生成好的库 文件存放的文件夹,make install 到对应得文件夹,
这里的交叉工具链,根据自己需求替换掉)
安装:make,make instal
<2>
lzo 库
编译方法:CC=arm-arago-linux-gnueabi-gcc ./configure --host=arm-arago-linux --prefix=XXXXX (--prefix=XXXXX 指 定生成好的库文件存放的文件夹,make install 到对应得文件夹)
安装:make,make install
<3>
e2fsprogs 库
编译方法:CC=arm-arago-linux-gnueabi-gcc ./configure --host= arm-arago-linux --prefix=XXXXX (--prefix=XXXXX 指定生成好的库文件存放的文件夹,make install 到对应得文件夹)
安装:make,make install-libs(将对应的库文件拷贝到对应的库文件夹里)
2、编译mtd-utils 源码
在mtd-utils的Makefile 可以看出 ZLIBCPPFLAGS、 ZLIBLDFLAGS 、LZOCPPFLAGS 、LZOLDFLAGS 来指定依赖 的头文件和库的位置,所以编译前设置这几个零时环境变量
export ZLIBCPPFLAGS = -I/XXXXX/include(XXXXX代表上述依赖库的安装路径)
export ZLIBLDFLAGS = -L/XXXXX/lib
export LZOCPPFLAGS = -I/XXXXX/include
export LZOLDFLAGS= -L/XXXXX/lib
make CROSS = arm-arago-linux-gnueabi-gcc WITHOUT_XATTR=1
(WITHOUT_XATTR=1是因为mtd-utils中有些源码使用了zlib.h中的库文件而不使用acl.h的库文件)
到此,mtd-utils 编译完成。
3、制作ubi文件系统
在这里默认已经有了自己的文件系统,下面介绍如何将文件系统制作成ubi.img镜像文件
<1>准备工具
在编译完成的mtd-utils目录中,将 ubifs-utils/mkfs.ubifs 和 ubi-utils/ubinize 这两个命令拷贝到
ubuntu系统的/usr/bin 目录下
<2>创建ubinize.cfg
进入文件系统所在目录,执行:
1.sudo mkfs.ubifs -r rootfs/ -F -o ubifs.img -m 2048 -e 126976 -c 1580
2.创建ubinize.cfg,编写如下内容
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=192MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
以上命令的含义为将/rootfs文件夹制作为UBIFS文件系统镜像,输出的镜像名为ubifs.img,-m参数指定了最小的
I/O操作的大小,也就是NAND FLASH一个page的大小,-e参数指定了逻辑擦除快的大小,-c指定了最大的逻辑块号
3.ubinize
sudo ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 ubinize.cfg
使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像转换成可直接在FLASH上烧写的格式(带有 UBI文件系统镜像卷标)
至此,ubi.img 文件系统制作完成。