linux ubi 文件系统制作

2019-07-12 23:16发布

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 文件系统制作完成。