ubi层次
转: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层次的更多相关文章
- Linux ubi子系统原理分析
本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...
- 挑子学习笔记:BIRCH层次聚类
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/6129425.html 本文是“挑子”在学习BIRCH算法过程中的笔记摘录,文中不乏一些个人理解,不当之处望 ...
- 根据异常处理对 Java 方法的层次分类
我根据异常处理对 Java 的方法分为三个层次:1.执行层,2. 处理层,3. 调用层. 执行层方法只抛出异常 throws Exception,是作为代码的基层操作者,可能有多个层次. 处理层方法使 ...
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- Oracle层次查询
Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...
- 【转】Windows 窗口层次关系
原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...
- SQL Server 2008 R2——以特定符号出现的次数来判断当前内容所在的层次
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- Linux UBI子系统设计初探
问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...
- WAF攻防研究之四个层次Bypass WAF
从架构.资源.协议和规则4个层次研究绕过WAF的技术,助于全方位提升WAF防御能力. 绕过WAF的相关技术研究是WAF攻防研究非常重要的一部分,也是最有趣的部分,所以我在写WAF攻防时先写攻击部分.还 ...
随机推荐
- c语言几个字符串处理函数的简单实现
直接贴代码: char* strcpy(char *a,char*b){//把字符串b全部拷贝到a中 assert(a != nullptr&&b != nullptr); char ...
- Python基础(6)_函数
一 为何要有函数? 不加区分地将所有功能的代码垒到一起,问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决? 函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必 ...
- HDU 2036 改革春风吹满地 (数学)
题目链接 Problem Description " 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道 ...
- [bzoj4515][Sdoi2016]游戏-树链剖分+李超线段树
Brief Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,A ...
- HTML5之FileReader的简易使用
用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.FileReader接口提供了读取文件的方法 ...
- ssh保持连接
转载自: http://www.neatstudio.com/show-625-1.shtml http://www.linuxidc.com/Linux/2010-05/26031.htm (这一篇 ...
- C++11 自动释放锁(转)
原文转自 https://blog.csdn.net/lmb1612977696/article/details/77712170 c++11加入了很多新的特性,值得我们去探索. 先看一个例子:普通的 ...
- [Leetcode Week11]Kth Largest Element in an Array
Kth Largest Element in an Array 题解 题目来源:https://leetcode.com/problems/kth-largest-element-in-an-arra ...
- Java坦克大战 (二) 之画一个能动的圆圈代表坦克
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- CentOS下使用Iptraf进行网络流量的分析笔记
CentOS下使用Iptraf进行网络流量的分析笔记 一.概述 Iptraf是一款linux环境下,监控网络流量的一款绝佳的免费小软件. 本博客其他随笔参考: Centos安装流量监控工具iftop笔 ...