UBI文件系统简介
在linux-2。6。27以前,谈到Flash文件系统,大家很多时候多会想到cramfs、jffs2、yaffs2等文件系统。它们也都是基于文件系统+mtd+flash设备的架构。linux-2。6。27后,内核加入了一种新型的FLASH文件系统UBI(UnsortedBlockImages)。这里简单介绍下UBI文件系统加入的原因,及使用方法。我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。
一、产生的背景
FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理FLASH的方法主要有:
1、采用MTD+FTL/NFTL(flash转换层/nandflash转换层)+传统文件系统,如:FAT、ext2等。FTL/NFTL的使用就是针对FLASH的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技术。但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。
2、采用硬件翻译层+传统文件系统的方案。这种方法被很多存储卡产品采用,如:SD卡、U盘等。这种方案对于一些产品来说,成本较高。
3、采用MTD+FLASH专用文件系统,如JFFS1/2,YAFFS1/2等。它们大大提高了FLASH的管理能力,并被广泛应用。
JFFS2、YAFFS2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了UBI文件系统的支持。
二、用法
环境:omap3530处理器、(128MByte16位NANDFlash)、linnux-2。6。28内核
1、配置内核支持UBIFS
DeviceDrivers--->MemoryTechnologydevice(MTD)support--->UBI-Unsortedblockimages--->EnableUBI
配置mtd支持UBI接口
Filesystems--->MiscellaneousfileSystems--->UBIFSfilesystemsupport
配置内核支持UBIFS文件系统
2、将一个MTD分区4挂载为UBIFS格式
●flash_eraseall/dev/mtd4//擦除mtd4
●ubiattach/dev/ubi_ctrl-m4//和mtd4关联
●ubimkvol/dev/ubi0-Nrootfs-s100MiB//设定volume大小(不是固定值,可以用工具改变)及名称
●mount-tubifsubi0_0/mnt/ubi或mount-tubifsubi0:rootfs/mnt/ubi
3、制作UBIFS文件系统
在制作UBI镜像时,需要首先确定以下几个参数:
MTDpartitionsize;//对应的FLASH分区大小
flashphysicaleraseblocksize;//FLASH物理擦除块大小
minimumflashinput/outputunitsize;//最小的FLASH输入输出单元大小
forNANDflashes-sub-pagesize;//对于nandflash来说,子页大小
logicaleraseblocksize。//逻辑擦除块大小
参数可以由几种方式得到
1)如果使用的是2。6。30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo–u。
2)之前的内核可以通过以下方法:
●MTDpartitionsize:从内核的分区表或cat/proc/mtd获得
●flashphysicaleraseblocksize:从flash芯片手册中可以得到FLASH物理擦除块大小,或cat/proc/mtd
●minimumflashinput/outputunitsize:
1)norflash:通常是1个字节
2)nandfalsh:一个页面
●sub-pagesize:通过flash手册获得
●logicaleraseblocksize:对于有子页的NANDFLASH来说,等于“物理擦除块大小-1页的大小”
3)也可以通过ubi和mtd连接时的产生的信息获取,如:
#modprobeubimtd=4//ubi作为模块加载
或
#ubiattach/dev/ubi_ctrl-m4//通过ubiattach关联MTD
UBI:attachingmtd4toubi0
UBI:physicaleraseblocksize:131072bytes(128KiB)
UBI:logicaleraseblocksize:129024bytes
UBI:smallestflashI/Ounit:2048
UBI:sub-pagesize:512
UBI:VIDheaderoffset:512(aligned512)
UBI:dataoffset:2048
UBI:attachedmtd4toubi0
更详细的解释参见http://www。linux-mtd。infradead。org/doc/ubi。html#L_overhead
#mkfs。ubifs-rrootfs-m2048-e129024-c812-oubifs。img
#ubinize-oubi。img-m2048-p128KiB-s512/home/lht/omap3530/tools/ubinize。cfg
-r:制定文件内容的位置
-m:页面大小
-e:逻辑擦除块大小
-p:物理擦除块大小
-c:最大的逻辑擦除块数量
对我们这种情况,文件系统最多可以访问卷上的129024812=100M空间
-s:最小的硬件输入输出页面大小,如:k9f1208为256(上下半页访问)
其中,ubinize。cfg的内容为:
[ubifs]
mode=ubi
image=ubifs。img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
4、利用uboot烧写、启动UBIFS镜像
1)烧写UBIFS镜像
OMAP3DevKit8000#mmcinit
OMAP3DevKit8000#fatloadmmc0:181000000ubi。img
readingubi。img
12845056bytesread
OMAP3DevKit8000#nandunlock
device0wholechip
nand
- VHDL:中文版Verilog HDL简明教程:第1章 简介(06-06)
- RS-485接口简介(12-20)
- I2C之知(一)--I2C的简介和特性(12-15)
- RS485简介(12-14)
- Android 框架简介(09-12)
- 温、湿度采集系统的硬件设计简介(11-09)
