转:http://www.360doc.com/content/11/0518/13/496343_117643185.shtml

UBI是什么?

它是一种flash管理方式

flash是一系列连续的物理擦除块组成的。

UBI卷是一系列连续的逻辑擦除块(eraseblock),每一块都可以被映射到物理分区,这种映射是由UBI管理的。

UBI是靠什么来管理这些物理擦除块的呢??

首先要区分一些层次:
1.MTD subsystem :
provide ubiform interface to access flash (e.g. /dev/mtd0)
2.UBI subsystem 
UBI works on top of MTD devices ,provide a notion of UBI volumes
3.UBIFS file system
work on top of UBI volume

UBI header

UBI在每一个物理擦除块的开始有2个64-byte的ubi-headers
1.erase counter header (or EC header);
记录着物理可擦除块上erase counter(擦除次数),以及其他一些不那么重要的信息
Erase counter是指物理可擦除块被擦除的次数
2.volume identifier header (or VID header)
记录着卷号(volume ID)和 这个物理可擦除块所属的逻辑可擦除块的ID
所有的UBI headers被CRC-32校验和所保护着
在我们sep4020的nandflash中,每一页为512字节,一个物理擦除块的大小为16K,也就是32页
其中EC header在每一个擦除块的第一页上(所以offset为0)
VID header在每一个擦除块的第二页上(偏移量offset为512)
所以一个完整的物理擦除块是什么结构呢?
第一页保存EC头,占了64字节(浪费了好多哦)
第二页保存VID头,同样也占64字节
其余的十页用来保存数据
Volume table

卷表(volume tabel)是一种flash上的数据结构,包含了UBI设备上的每一卷(volume)的信息(基本信息),卷表是一系列 volume table record,每一个记录块上包含了一下的信息:

1.volume size
2.volume name 
3.volume type (dynamic or static )
4.volume alignment
5.update marker(防止数据更新发生意外打断,可以恢复)
6.auto-resize flags
7.CRC-32 校验和
UBI内部保持着两份卷表volume table,保持UBI的稳定性,防止突然断电的情况
这两份卷表保存在一个叫做layout volume的内部卷区中,这个卷区对于用户空间是不可见的

怎么才能从一个逻辑ID找到与它映射的物理ID?
其实在我们的volume是有三个表的
1.volume table     (flash media)
2.eraseblock association (EBA) table    (ram)
3.erase counters (EC) table (ram)
建立EBA和EC table就必须扫描整个ubi设备,来获得物理块与逻辑块之间映射关系的全部信息
在这个映射关系变更时,要及时的更新表
UN_MAP:
unmap就是清除物理块(peb)和逻辑块(leb)这种映射关系

那么这种映射关系不存在的话,那么物理块中保持的数据也就没有意思了,所以需要清除(erase),这种清除工作是后台进程来执行的

unmap机制通常被当做是一种快速擦除nand的手段

1.不需要等待返回,因为总是存在一些unmaped的物理块peb可供来进行映射(ubi策略上保留了一些物理块)

均衡损耗:
如果老是对着同一个nandflash的物理块进行擦除、读写操作,就坏导致这个物理块成为一个坏块。
UBI中擦除会连同保存了UBI的物理与逻辑映射关系的VID header一同擦除
但是EC header是保留的

这样每一次擦除都会断开物理块(P1)与逻辑块之间(L1)的映射关系,假如我现在向逻辑块L1中写数据,系统会根据EC头中擦除次数去找一个物理块,然后建立映射关系。
这样就避免了对同一个物理块操作次数过多

在建立逻辑块与物理块的映射时,ubi会从所以得未进行映射的物理块中找出一个擦除次数最少的建立映射关系

下面看一下挂载一个ubifs文件系统的步骤:
ubiattach /dev/ubi_ctrl -m 3                                      
1.ubiattach是将一个mtd分区关联为ubi设备,在这个过程中,会再次扫描mtd分区(全部扫描)
2.建立EBA 和EC table
3.接下来系统会去读ubi中保存的两个卷表,显然第一次的时候这两个卷表是不存在的。
4.ubi会去创建两个卷表,然后初始化之。一般是我们mtd设备的前两个擦除块
(leb0 和 leb1)
5.接下来会创建一个后台进程,然后唤醒它,这个进程干什么的呢?它会进行物理块擦除的工作

创建卷:
ubimkvol /dev/ubi0 -N ubifs -s 15MiB 
在ubi函数是调用了ubi_create_volume
前面我们讲一个mtd设备关联为ubi设备,在一个mtd设备中可以创建好多的volume
在创建一个volume的同时,要将volume table中对应位进行更新

挂载:
mount -t ubifs ubi0:ubifs /mnt

次数(yaffs) 读速度(block2到sdram) 写速度(sdram到block2)
1                           11.59s                               50.67s
2                           10.79s                               50.65s
3                           11.10s                               50.09s
平均                      11.16s(1.245MB/S)            50.47s(282.02KB/S)
次数(ubifs)       读速度                                写速度
1                              9.26s                               33.95s
2                                7.44s                              32.87s
3                                7.80s                              34.06s
平均                          8.17s(1.7MB/S)          33.63s(423.24KB/S)

ubi层次的更多相关文章

  1. Linux ubi子系统原理分析

    本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...

  2. 挑子学习笔记:BIRCH层次聚类

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/6129425.html 本文是“挑子”在学习BIRCH算法过程中的笔记摘录,文中不乏一些个人理解,不当之处望 ...

  3. 根据异常处理对 Java 方法的层次分类

    我根据异常处理对 Java 的方法分为三个层次:1.执行层,2. 处理层,3. 调用层. 执行层方法只抛出异常 throws Exception,是作为代码的基层操作者,可能有多个层次. 处理层方法使 ...

  4. lintcode二叉树的锯齿形层次遍历 (双端队列)

    题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...

  5. Oracle层次查询

    Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...

  6. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

  7. SQL Server 2008 R2——以特定符号出现的次数来判断当前内容所在的层次

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  8. Linux UBI子系统设计初探

    问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...

  9. WAF攻防研究之四个层次Bypass WAF

    从架构.资源.协议和规则4个层次研究绕过WAF的技术,助于全方位提升WAF防御能力. 绕过WAF的相关技术研究是WAF攻防研究非常重要的一部分,也是最有趣的部分,所以我在写WAF攻防时先写攻击部分.还 ...

随机推荐

  1. 知问前端——按钮UI

    按钮(button),可以给生硬的原生按钮或者文本提供更多丰富多彩的外观.它不单单可以设置按钮或文本,还可以设置单选按钮和多选按钮. 使用button按钮 使用button按钮UI的时候,不一定必须是 ...

  2. python module: csv

    转自:sislcb 读 syntax : reader(csvfile[, dialect='excel'][, fmtparam]) csvfile:需要是支持迭代(Iterator)的对象,并且每 ...

  3. 智能合约安全-parity多重签名钱包安全漏洞

    漏洞原因: 因为initWallet函数是公开函数( public function) , 攻击者调用initWallet,重新初始化钱包会把之前合约钱包所有者覆盖, 即可改变钱包所有者. 漏洞代码: ...

  4. Codeforces 940F Machine Learning 带修改莫队

    题目链接 题意 给定一个长度为\(n\)的数组\(a\),\(q\)个操作,操作分两种: 对于区间\([l,r]\),询问\(Mex\{c_0,c_1,c_2,⋯,c_{10^9}\}\),其中\(c ...

  5. servlet(5) - Cookie和session - 小易Java笔记

    1.会话概述 (1)会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. (2)会话过程中的数据不宜保存在request和servle ...

  6. PC机做ISCSI存储服务器故障

    物理主机:IBM x3650 6块SAS盘,分为两组RAID.一组系统,一组数据. zabbix监控告警情况如下: 早上上班,发现服务器无法连接,网络无法通信.让IDC重启,还是无法恢复正常. 去了机 ...

  7. Java处理文件BOM头的方式推荐

    背景: java普通的文件读取方式对于bom是无法正常识别的. 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出 ...

  8. 漫谈网络通信——从OSI网络模型到TCP/IP协议族

    OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型成为开放式系统互联参考模型,是一个把网络通信在逻辑上的定义,也可以理解成为定义了通用的网络通信 ...

  9. 纯css 超链接变按钮

    a{ font-family:Arial; font-size:.8em; text-align:center; margin:3px;}a:link,a:visited{ color:#A62020 ...

  10. HDU 多校1.4

    Division Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...