新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > UBI文件系统简介

UBI文件系统简介

作者:时间:2012-04-20来源:网络收藏

在linux-2。6。27以前,谈到Flash,大家很多时候多会想到cramfs、jffs2、yaffs2等。它们也都是基于+mtd+flash设备的架构。linux-2。6。27后,内核加入了一种新型的FLASH文件系统(UnsortedBlockImages)。这里简单介绍下文件系统加入的原因,及使用方法。我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。

本文引用地址:http://www.eepw.com.cn/article/149191.htm

一、产生的背景

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容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了文件系统的支持。

二、用法

环境: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_unlock:start:00000000,length:235456!

NANDflashsuccessfullyunlocked

OMAP3DevKit8000#nandeccsw

OMAP3DevKit8000#nanderase6800007980000

NANDerase:device0offset0x680000,size0x7980000

Erasingat0x7fe0000--100%complete。

OK

OMAP3DevKit8000#nandwrite。i81000000680000$(filesize)

NANDwrite:device0offset0x680000,size0xc40000

Writingdataat0x12bf800--100%complete。

12845056byteswritten:OK

烧写过程和烧写内核镜像的过程一致,所以UBI文件系统应该不像yaffs文件系统那样用到了nand的OOB区域。

2)设置UBIFS文件系统作为根文件系统启动的参数

OMAP3DevKit8000#setenvbootargsconsole=ttyS2,115200n8ubi。mtd=4root=ubi0:rootfs

rootfstype=ubifsvideo=omapfb:mode:4。3inch_LCD

OMAP3DevKit8000#setenvbootcmdnandread。i80300000280000200000;bootm80300000

根文件系统的位置在MTD4上

系统启动时会打印出如下和UBI相关的信息:

Creating5MTDpartitionsnumbergoodPEBs:970

UBI:numberofbadPEBs:2

UBI:max。allowedvolumes:128

UBI:wear-levelingthreshold:4096

UBI:numberofinternalvolumes:1

UBI:numberofuservolumes:1

UBI:availablePEBs:0

UBI:totalnumberofreservedPEBs:970

UBI:numberofPEBsreservedforbadPEBhandling:9

UBI:max/meanerasecounter:2/0



关键词: 简介 系统 文件 UBI

评论


相关推荐

技术专区

关闭