UBI根文件的制作

UBI文件系统的简介:我们传统对Flash上的日志和坏块管理都是通过MTD+Flash专用文件系统来进行管理(如JFFS2、YAFFS2),但这两种文件系统也存在着一些技术瓶颈:磨损均衡,读写速度等问题。所以在这样的背景下,我们通常用ubi文件系统来对Flash进行管理就比较方便。UBI文件是建立在UBI一层上的,通过UBI的特有头部数据实现逻辑擦除块到物理擦除块的映射,卷管理,磨损均衡等问题,它是建立在MTD子系统之上。

在制作UBI文件系统时主要会遇到三个方面的问题:制作UBI工具的生成,内核支持,u-boot参数的传递。

  1. 制作UBI文件时用到的工具:mkfs.ubifs和ubinize 
       首先我们需要从网上下载这几个压缩包:e2fsprogs-1.42.tar.gz,lzo-2.04.tar.gz,mtd-utils-1.4.9.tar.bz2 ,zlib-1.2.5.tar.gz。
    然后对他们进行解压缩,每个压缩包解压后都会生成对应的子目录:
   
   然后我们在分别进入子目录进行交叉编译,以其中一个为例:

在每个子目录下都有一个configuer文件,它是我们用来生成对应的Makefile文件,其相关用法可以用./configure --help命令来进行了解,其中包括你交叉编译后相关的库的安装路径,是否使能动态库,静态编译等等。比如第一幅图的install目录就是我指定的安装路径。
最后我们在进入到UBI根文件的制作_第1张图片
执行make进行编译,在编译过程中我们会遇到相关库找不到的问题,这时我们就用export CFLAGS或LDFLAGS = -I或-L来指定相关库的绝对路径。
最后编译成功后会生成mkfs.ubifs,这个工具是用来生成UBI文件的镜像文件的。我们生成镜像文件后我们会用ubinize工具来 mkfs.ubifs 制作的映像转换为可以直接用 nand write 命令烧录的映像文件。这个工具在

接下来我们就用这两个工具来制作UBI的镜像文件

说明一下各个参数的意思:  
     -r:制定文件内容的位置 
     -m:页面大小 
     -e:逻辑擦除块大小 
     -p:物理擦除块大小 
     -c:最大的逻辑擦除块数量
 不同的Flash对应的参数的值不同
然后对生成的镜像文件使用

对于$sub-page_size和vid_head_offset都是512,而对于config_file文件的内容:
   UBI根文件的制作_第2张图片
   其中指定了等会u-boot参数要使用到的变量,比如vol_id=0,指定了相应卷标的序列号。
当内核启动时,会根据相应的卷标名去寻找根文件系统最后就会生成一个根据你的目录树所制作成的UBI文件系统。  
   2.   添加内核支持
            

Device Drivers  --->

       <*> Memory Technology Device (MTD) support  --->

             <*>   Enable UBI - Unsorted block images  --->

                  --- Enable UBI - Unsorted block images                                     

                  (4096) UBI wear-leveling threshold (NEW)                                   

                  (1)   Percentage of reserved eraseblocks for bad eraseblocks handling (NEW)

                  < >   MTD devices emulation driver (gluebi) (NEW)                          

                  [ ]   UBI debugging (NEW)                     

       

   File systems  --->

       [*] Miscellaneous filesystems  --->

  

             <*>   UBIFS file system support          

             [*]     Extended attributes support      

             [*]     Advanced compression options     

             [*]       LZO compression support (NEW)  

             [*]       ZLIB compression support (NEW) 

             [ ]     Enable debugging support (NEW)

另外还要取消以下选项:

                                

取消光标所在处和Samsung s3c NAND Hardware ECC校验,不然我们在挂载文件系统时会出现错误。

详情请参考:http://www.linux-mtd.infradead.org/faq/ubi.html#L_subpage_verify_fail

   3. 修改U-boot的参数


然后下载内核启动:

UBI根文件的制作_第3张图片

这是我的内核分区及UBI挂载时相应的信息


你可能感兴趣的:(UBI根文件的制作)