ubifs文件系统的制作

来源:互联网 发布:网络教学的弊端英文 编辑:程序博客网 时间:2024/06/04 21:34

1、背景

  在Linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到JFFS2、YAFFS2等文件系统,它们都是基于文件系统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。JFFS2、YAFFS2等专用文件系统存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等,在此背景下内核加入了UBI文件系统的支持。

2、内核配置

a、配置mtd支持UBI接口
Device Drivers —>Memory Technology Device (MTD) support —>UBI - Unsorted block images —>Enable UBI

b、配置内核支持UBIFS文件系统
File systems —>Miscellaneous filesystems —>UBIFS file system support

3、制作UBIFS文件系统

3.1 获取相关参数
  在制作UBI镜像时,需要首先确定以下几个参数:
  MTD partition size;           //对应的FLASH分区大小
  flash physical eraseblock size;     // FLASH物理擦除块大小
  minimum flash input/output unit size;  //最小的FLASH输入输出单元大小
  for NAND flashes - sub-page size;    //对于nand flash来说,子页大小
  logical eraseblock size.        //逻辑擦除块大小
  这些参数可以通过以下三种方法获得:
  (1)如果使用的是2.6.30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo –u。
  (2)之前的内核可以通过以下方法:
    MTD partition size:从内核的分区表或cat /proc/mtd获得
    flash physical eraseblock size:从flash芯片手册中可以得到FLASH物理擦除块大小,或cat /proc/mtd
    minimum flash input/output unit size:
      1)nor flash:通常是1个字节
      2)nand falsh:一个页面
    sub-page size:通过flash手册获得
    logical eraseblock size:对于有子页的NAND FLASH来说,等于“物理擦除块大小-1页的大小”
  (3)也可以通过ubi和mtd连接时的产生的信息获取,如:
  #modprobe ubi mtd=4 //ubi作为模块加载
  或者
  #ubiattach /dev/ubi_ctrl -m 4 //通过ubiattach关联MTD
  UBI: attaching mtd4 to ubi0
  UBI: physical eraseblock size: 131072 bytes (128 KiB)
  UBI: logical eraseblock size: 129024 bytes
  UBI: smallest flash I/O unit: 2048
  UBI: sub-page size: 512
  UBI: VID header offset: 512 (aligned 512)
  UBI: data offset: 2048
  UBI: attached mtd4 to ubi0
  
3.2 使用mkfs.ubifs工具制作文件系统

page_size_in_bytes = 2048     #ubi part Image; -->UBI: smallest flash I/O unit:2048logical_erase_block_size = 126976 #ubi part Image; -->UBI: logical eraseblock size:126976 bytespatition_logical_blocks = 2047  #ubi part Image; -->UBI: number of good PEBs:399 "50MiB"mkfs.ubifs -x favor_lzo -m $(page_size_in_bytes) -e $(logical_erase_block_size) -c $(patition_logical_blocks) -r /home/rootfs -o /tftpboot/ubifs.img

  -r:制定文件内容的位置
  -m:页面大小
  -e:逻辑擦除块大小
  -c:逻辑擦除块数量
  通过此命令制作的出的UBIFS文件系统镜像可在u-boot下使用ubi write命令烧写到NAND FLASH上。使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像转换成可直接在FLASH上烧写的格式。通过此命令生成的ubi.img可直接使用NAND FLASH的烧写命令烧写到FLASH上。
ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/ubinize.cfg
  -p:物理擦除块大小
  -s:最小的硬件输入输出页面大小
  其中,ubinize.cfg的内容为:
  [ubifs]
  mode=ubi
  image=ubifs.img
  vol_id=0
  vol_size=100MiB
  vol_type=dynamic
  vol_name=rootfs
  vol_flags=autoresize

4、烧写及启动

4.1 烧写
  mmcinit
  fatload mmc 0:1 81000000 ubi.img
  nand unlock
  nand ecc sw
  nand erase 680000 7980000
  nand write.i 81000000 680000 $(filesize)

4.2 启动
  setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs
  setenv bootcmd nand read.i 80300000 280000 200000;bootm 80300000
  run bootcmd

0 0
原创粉丝点击