`
mmdev
  • 浏览: 13244664 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

UBI文件系统简介

阅读更多

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

一、产生的背景

FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理FLASH的方法主要有:

1、采用MTD+FTL/NFTL(flash 转换层/nand flash转换层)+ 传统文件系统,如:FAT、ext2等。FTL/NFTL的使用就是针对FLASH的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技术。但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。

2、采用硬件翻译层+传统文件系统的方案。这种方法被很多存储卡产品采用,如:SD卡、U盘等。这种方案对于一些产品来说,成本较高。

3、采用MTD+ FLASH专用文件系统,如JFFS1/2,YAFFS1/2等。它们大大提高了FLASH的管理能力,并被广泛应用。

JFFS2、YAFFS2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了UBI文件系统的支持。

二、用法

环境:omap3530处理器、 (128MByte 16 位NAND Flash) 、linnux-2.6.28内核

1、配置内核支持UBIFS

Device Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted block images --->Enable UBI
配置mtd支持UBI接口
File systems --->Miscellaneous filesystems --->UBIFS file system support
配置内核支持UBIFS文件系统

2、将一个MTD分区4挂载为UBIFS格式

flash_eraseall /dev/mtd4 //擦除mtd4
ubiattach /dev/ubi_ctrl -m 4 //和mtd4关联
ubimkvol /dev/ubi0 -N rootfs -s 100MiB //设定volume 大小(不是固定值,可以用工具改变)及名称
mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi

3、制作UBIFS文件系统

在制作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

更详细的解释参见http://www.linux-mtd.infradead.org/doc/ubi.html#L_overhead

#mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 812 -o ubifs.img
#ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/lht/omap3530/tools/ubinize.cfg

-r:制定文件内容的位置
-m:页面大小
-e:逻辑擦除块大小
-p:物理擦除块大小
-c:最大的逻辑擦除块数量
对我们这种情况,文件系统最多可以访问卷上的129024*812=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镜像

OMAP3 DevKit8000 # mmcinit
OMAP3 DevKit8000 # fatload mmc 0:1 81000000 ubi.img
reading ubi.img
12845056 bytes read
OMAP3 DevKit8000 # nand unlock
device 0 whole chip
nand_unlock: start: 00000000, length: 268435456!
NAND flash successfully unlocked
OMAP3 DevKit8000 # nand ecc sw
OMAP3 DevKit8000 # nand erase 680000 7980000
NAND erase: device 0 offset 0x680000, size 0x7980000
Erasing at 0x7fe0000 -- 100% complete.
OK
OMAP3 DevKit8000 # nand write.i 81000000 680000 $(filesize)
NAND write: device 0 offset 0x680000, size 0xc40000
Writing data at 0x12bf800 -- 100% complete.
12845056 bytes written: OK

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

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

OMAP3 DevKit8000 # setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs
rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
OMAP3 DevKit8000 # setenv bootcmd nand read.i 80300000 280000 200000\;bootm 80300000

根文件系统的位置在MTD4上

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

Creating 5 MTD partitions on "omap2-nand":
0x00000000-0x00080000 : "X-Loader"
0x00080000-0x00260000 : "U-Boot"
0x00260000-0x00280000 : "U-Boot Env"
0x00280000-0x00680000 : "Kernel"
0x00680000-0x08000000 : "File System"
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
UBI: MTD device name: "File System"
UBI: MTD device size: 121 MiB
UBI: number of good PEBs: 970
UBI: number of bad PEBs: 2
UBI: max. allowed volumes: 128
UBI: wear-leveling threshold: 4096
UBI: number of internal volumes: 1
UBI: number of user volumes: 1
UBI: available PEBs: 0
UBI: total number of reserved PEBs: 970
UBI: number of PEBs reserved for bad PEB handling: 9
UBI: max/mean erase counter: 2/0

作者:刘洪涛,华清远见嵌入式学院金牌讲师

最后公布一个最近的讲座信息,和几位华清远见比较牛的同事一起来负责此次讲座,感兴趣的朋友,欢迎参加!

8月15日嵌入式Linux典型案例开发免费讲座:http://www.farsight.com.cn/lecture/L090815.aspx(消费电子、工业控制、航空航天 三大领域一网打尽)

分享到:
评论

相关推荐

    电鱼派ubi文件系统工具

    电鱼派ubi文件系统工具是保定电鱼电子科技有限公司推出的一款专用于制作和管理ubi文件系统的软件工具。在嵌入式设备和物联网(IoT)领域,ubi文件系统扮演着至关重要的角色,因为它能提供高效、可靠的数据存储解决方案...

    ubi文件系统生成用工具。

    UBI(Unsorted Block Images)文件系统是一种专为嵌入式设备设计的文件系统,它在 NAND 闪存上提供高效、可靠的数据存储。在嵌入式系统开发中,UBI 文件系统通常用于处理 NAND 闪存的特性,如坏块管理和磨损均衡,以...

    UBI文件系统使用总结

    ### UBI 文件系统使用总结 #### 一、利用 nandsim 挂载 UBI 文件系统 本章节主要介绍如何在 Fedora 15 上利用 nandsim 虚拟 NAND Flash,并通过 mtd-utils 工具包搭建一个 UBI 文件系统进行测试。此方法适用于在...

    ubi文件系统故障排查

    ### UBI 文件系统故障排查知识点 #### 一、概述 UBI (Universal Block Interpreter) 是一个为嵌入式系统设计的文件系统,主要用于基于 NAND 闪存设备的应用场景。由于 NAND 闪存固有的特性(如擦写次数有限、读写...

    ubi文件系统生成用工具

    在本文中,我们将深入探讨如何使用指定的工具——`mkfs.ubifs`和`ubinize`来生成UBI文件系统。 `mkfs.ubifs`是创建UBI文件系统的命令行工具。它的主要任务是将一个标准的Linux文件系统(如ext3、ext4等)转换成适用...

    UBI文件系统移植总结

    ### UBI文件系统移植总结与关键技术解析 #### 一、UBIFS概览 UBIFS(Unsorted Block Images File System)是一种专为闪存设计的文件系统,由IBM、诺基亚的工程师Thomas Gleixner、Artem Bityutskiy等在2006年发起...

    嵌入式系统/ARM技术中的UBI文件系统简介

    这里简单介绍下UBI文件系统加入的原因,及使用方法。我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。  一、产生的背景  FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前...

    ubi根文件系统制作

    总结来说,ubi根文件系统制作涉及多步操作,从选择合适的文件系统类型,制作和填充文件系统镜像,到转换为ubi格式,再到硬件上的部署与验证。这个过程需要对Linux内核、文件系统、嵌入式系统以及NAND Flash管理有...

    UBI文件系统分析

    ### UBI文件系统分析 #### 一、挂载UBIFS的代码分析 ##### 1. ubi_attach_mtd_dev函数解析 UBIFS (Unsorted Block Image File System) 是一种为闪存存储器优化的文件系统,它适用于各种嵌入式系统。在分析UBIFS的...

    UBI 文件系统使用指南1

    在u-boot环境中使用UBI文件系统,需要确保u-boot也支持UBI,并正确配置了相关参数。通常需要执行以下操作: - 加载UBI模块。 - 初始化UBI设备。 - 将UBI卷挂载到指定的加载点。 ### **5. 结论** UBI文件系统是针对...

    对嵌入式Linux操作系统中的UBIFS文件系统备份方法.docx

    嵌入式Linux操作系统中的UBIFS文件系统备份方法 嵌入式Linux操作系统中的UBIFS文件系统备份方法是指在嵌入式Linux操作系统中对UBIFS文件系统进行备份的方法,以减少由于断电导致数据设置问题。本方法的实现目标是...

    电鱼派ubi格式文件系统

    电鱼派ubi格式文件系统 保定电鱼电子科技有限公司出品

    linux文件系统制作

    **存放文件系统的设备与文件系统设备**:正如Windows XP中的C盘作为文件系统设备存储NTFS或FAT32等文件系统,Linux同样依赖于特定格式的文件系统(如ext3)作为其根文件系统。只要内核支持,几乎任何兼容的文件系统...

    LINUX下UBI子系统的研究与应用.pdf

    UBI子系统是Linux内核中用于处理NAND闪存的一种机制,它为上层的文件系统提供了一个抽象层,隔离了NAND的复杂性。UBI的主要任务包括错误管理、坏块处理、动态坏块映射等,使得文件系统可以忽略这些底层细节,专注于...

    UBIFS文件系统简析

    UBI层对外提供的接口允许文件系统查询和管理UBI设备的信息。 UBIFS文件系统的核心结构包括Super区、Master区、LPT子系统、Find中间件、预算子系统、TNC子系统、日志子系统、垃圾回收子系统、orphan子系统、recover...

    制作cramfs文件系统

    #### 一、cramfs文件系统简介 cramfs(Compressed Read-Only ARM File System)是一种压缩只读文件系统,主要用于嵌入式设备中,例如路由器和其他小型网络设备。由于其占用空间小且启动速度快的特点,在嵌入式Linux...

    UBI design

    UBI的主要目标是为NAND Flash提供一个统一的文件系统接口,以简化文件系统的实现并提高其在闪存上的性能和可靠性。 #### 二、UBI卷结构 **UBI卷** 是UBI的核心概念之一,它定义了数据在闪存上的逻辑组织方式。UBI...

Global site tag (gtag.js) - Google Analytics