在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_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

linux ubi 分区,linux UBI文件系统简介相关推荐

  1. linux 推荐分区,Linux分区的推荐方案和方法

    首先你必须考虑的是 ●主机的规划 1.是采用单(单一Linux)还是多系统(M$ Windows与Linux共存) 如果是单一系统,那么你就不需考虑是不是要与其他系统做磁盘的共用了,如果是多系统,那么 ...

  2. linux ubi 分区,Linux最新UBI文件系统介绍

    嵌入式linux中文站关注嵌入式linux文件系统的发展.在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统.它们也都是基于文 ...

  3. linux 磁盘分区类型,Linux 磁盘分区类型和文件系统(示例代码)

    当前主流的操作系统磁盘分区类型主要有以下两种: MBR分区 主分区系统之中只能有四个主分区,以第一块磁盘为例,在没有扩展分区的情况下只能有sda1,sda2,sda3,sda4四个,当需要多个分区时, ...

  4. linux centos 分区,linux centos 分区

    1.查看硬盘 [root@localhost ~]# fdisk -l 2.使用fdisk命令分区 [root@localhost ~]# fdisk /dev/sdb(此处为设备名称) 常用命令: ...

  5. linux+fdisk+分区,Linux下Fdisk分区详解

    那么你知道Linux下Fdisk分区详解么?接下来是小编为大家收集的Linux下Fdisk分区详解,欢迎大家阅读: Linux下Fdisk分区详解 1. 通过Fdisk查看系统分区详细信息: Fdis ...

  6. linux经典分区,Linux与硬盘分区·[经典常温旧贴]

     摘要 如何为Linux进行硬盘分区,要搞定这个问题,首先要知道Linux是如何处理硬盘分区问题,这个基本的知识能够帮助你更好地掌握Linux.(2002-07-22 13:44:38) By 风过 ...

  7. linux mkfs 分区,linux mkfs命令详解:格式化分区(为分区写入文件系统)

    分区完成后,如果不格式化写入文件系统,则是不能正常使用的.所以我们需要使用 mkfs 命令进行格式化. mkfs 命令格式如下: [root@localhost ~]# mkfs [选项] 分区设备文 ...

  8. linux raw 分区,Linux、Windows和嵌入式设备使用的文件系统汇总!-文件系统raw

    1.Linux linux存在几十个文件系统类型:ext2.ext3.ext4.xfs和brtfs等类型 不同文件系统采用不同的方法管理磁盘空间,各有优劣:文件系统是具体到分区的,所以格式化针对的是分 ...

  9. linux 1t 分区,Linux磁盘管理——swap分区

    对swap分区的误解 一种流行的.以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍.也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间.其实这是严重的浪费 ...

  10. 国产系统linux硬盘分区,Linux系统硬盘分区方案推荐

    在计算机上安装 Linux 系统,对硬盘进行分区是一个非常重要的步骤,下面介绍几个分区方案. 方案 1 / :建议大小在 5GB 以上. swap :即交换分区,建议大小是物理内存的 1~2 倍. 方 ...

最新文章

  1. php的VC9-VC14运行库分享以及localhost访问404问题
  2. F#基础教程 列表
  3. 服务器引导顺序,docker compose 服务启动顺序控制的方法
  4. 经济学自身利益最大化_劳动经济学:研究劳动力市场运作的专业
  5. Netty异步非阻塞事件驱动及原理详解
  6. 浏览器缓存机制(优化)
  7. redis php方法,PHP操作Redis的基本方法
  8. 云智慧:创新思维助酷讯IT运维管理升级
  9. Android-第三天
  10. linux查找以h结尾的文件,linux中文件查找的常用命令
  11. paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决
  12. Login控件在浏览器中打开时显示英文
  13. Insert Node in Sorted Linked List
  14. Stylus基本使用
  15. 如何可以用cad迷你家装v2018
  16. 手机“入殓师”,你之前有听过吗?
  17. 【修真院“善良”系列之十】初级Java程序员的学习路线 1
  18. elementPlus el-dialog 自适应
  19. 计算机网络思维导图_计算机网络面试指南 考研/校招
  20. [回顾]2007年木马病毒“英雄榜”,你中过几个

热门文章

  1. 西安网络安全周 | 联软科技:论端点安全在零信任体系中的重要性
  2. 接入 钉钉 OA 审批
  3. cortex a7 a53_镜头测试:蔡司红T28/2.8+索尼微单A7实拍北京景山公园
  4. 计算机学报在线阅读,计算机研究与发展计算机学报软件学报电子学报西安交通大学学报.doc...
  5. 傅里叶级数与傅里叶变换公式推导
  6. Shell实现俄罗斯方块小游戏
  7. Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表
  8. Python“Non-ASCII character 'xe5' in file”报错问题(转)
  9. SpringBoot集成Nacos
  10. 七年级下册政治知识点总结