转自:http://blog.chinaunix.net/uid-28236237-id-4217118.html

UBI 文件头位置

EC头都放置在擦除块的开始偏移位置,占用64字节空间。之后防止VID头,VID头要么放置在偏移最小IO大小的位置,要么放置在子页位置,也占用64字节空间。一般有如下的三种情况

对于NOR Flash情况,最小IO为1byte,所有VID头紧接着就放置在EC头的后面

对于有子页的NAND Flash的情况,VID放置在第一个页的子页上面

对于没有子页的NAND Flash情况,VID头放置在第二个页上面

Flash空间的开销

UBI系统会使用一些Flash空间作为其系统管理的开销。这样就减小了UBI系统用户可用的Flash大小。一般一个UBI系统Flash系统开销有如下:

两个物理擦除块保存卷表

一个物理擦除块保留给磨损均衡使用

一个物理擦除块保留给原子改变逻辑擦除块使用

另外还有一些物理擦除块保留给坏块替换,这个只对NAND Flash是这样。保留物理擦除块多少是可以配置的,默认是1024个物理擦除块中保留20个擦除块。

在物理擦除块最开始的一部分空间还要保留出来给EC头和VID头使用。保留的这部分空间大小取决与Flash的种类。

保留擦除计数

当使用UBI的时候,非常重要的一个概念就是你必须意识到UBI保存了擦除计数在Flash介质上面。也就是每一个可用的物理块都保存了一个记录了擦除次数的EC头在物理块的开始部分。不丢失这部分数据是很重要的。这样用来操作这些物理块的工具必须是能检测到UBI的存在,MTD工具中相关的工具能正确的操作UBI系统上的物理擦除块。

UBI 文件头位置

EC头都放置在擦除块的开始偏移位置,占用64字节空间。之后防止VID头,VID头要么放置在偏移最小IO大小的位置,要么放置在子页位置,也占用64字节空间。一般有如下的三种情况

对于NOR Flash情况,最小IO为1byte,所有VID头紧接着就放置在EC头的后面

对于有子页的NAND Flash的情况,VID放置在第一个页的子页上面

对于没有子页的NAND Flash情况,VID头放置在第二个页上面

Flash空间的开销

UBI系统会使用一些Flash空间作为其系统管理的开销。这样就减小了UBI系统用户可用的Flash大小。一般一个UBI系统Flash系统开销有如下:

两个物理擦除块保存卷表

一个物理擦除块保留给磨损均衡使用

一个物理擦除块保留给原子改变逻辑擦除块使用

另外还有一些物理擦除块保留给坏块替换,这个只对NAND Flash是这样。保留物理擦除块多少是可以配置的,默认是1024个物理擦除块中保留20个擦除块。

在物理擦除块最开始的一部分空间还要保留出来给EC头和VID头使用。保留的这部分空间大小取决与Flash的种类。

保留擦除计数

当使用UBI的时候,非常重要的一个概念就是你必须意识到UBI保存了擦除计数在Flash介质上面。也就是每一个可用的物理块都保存了一个记录了擦除次数的EC头在物理块的开始部分。不丢失这部分数据是很重要的。这样用来操作这些物理块的工具必须是能检测到UBI的存在,MTD工具中相关的工具能正确的操作UBI系统上的物理擦除块。

UBI镜像和擦除相关

下面的步骤就是擦除UBI镜像的一般过程

首先,扫描整个UBI分区,收集每个擦除块上面的EC值,也就是读出没一个PEB的VID header,检查CRC-32校验,并且记录擦除计数到内存中,一般这个过程没有必要读取VID Header。遇到坏快就跳过去。

计算出平均的EC 记述值,这个值会被用来重新写入到EC Header丢失或者坏掉的PEB块上面。这种EC Header丢失或者损坏的情况出现在掉电重启等情况下。这样的PEB不会很多。

如果只是单纯的擦除掉flash,没一个PEB块会被擦除,合适的EC 头会被写入到PEB的起始位置。EC Header中擦除计数应该相应的加1,坏块应该跳过,对于NandFlash,擦除和写入过程中如果遇到了IO错误,相应的块就应该被标记为坏快。

如果是烧写UBI镜像,相应的过程如下

首先将一块PEB大小的镜像读入到内存buffer中,将buffer中余下的空间全部设置成0xff,擦除PEB,修改EC Header的buffer空间,增加EC counter计数,重新计算CRC-32的校验值。

将buffer写入到物理擦除块中。

通常,如果遇到坏快的话需要跳过坏快,在擦除和写入Flash过程中如果遇到了坏块就需要将相应的Flash块标记为坏块。

通常来说,UBI的镜像会比Flash要大一些,所以擦除程序需要将UBI镜像区域正确的写入,并且将多余的Flash区域正确的擦除

需要了解的是,当写入一个UBI镜像的时候,没有必要关心UBI镜像写到擦除块上面的顺序,地一个输入块可以写如到地一个物理块,也可以写入到第二个,第三个上面。

如果你为产线上写一个擦除程序,你没有必要关心去改变EC Header的擦除计数的增加,因为,产线上的Flash基本上都是新的,擦除计数可以认为是0

UBI标记擦除块为坏块

这一节只和NANDflash相关,因为只有NAND Flash才存在坏块。有两种情形UBI会标识擦除块为坏块。

一种情况是写擦除块操作失败,这个时候UBI将数据从这个物理块写入到其它物理块,进行数据恢复,并将发生写错误的物理块传递到后台进行测试判定是否为坏块。

如果是擦除操作发射IO错误,直接将这个物理块标记为坏块。

坏块拷问(bad block
torturing)是在系统后台进行的,目的是为了检测物理块是否真的是坏块。因为发生写错误会有多种原因,比如驱动程序写得有问题,或者上层软件写得有问题,对同一块Flash区域进行了多次写入。所以坏块拷问是很有必要的,避免坏块的误判。坏块的拷问过程如下:

擦除物理块

重新读入擦除块,检查是不是全0xFF字节

写入测试模式的字节

将数据读回并检查测试字节

检查多个测试式样的字节(0xA5,0x5A,0x00)

如果上面的坏块拷问过程都能顺利通过,那么这个物理块不会被标识为坏块。在坏快拷问过程中如果出现了bit反转,则这个块就被标记为坏块。torture_peb()函数就是坏块拷问的具体过程。

可扩展性问题

非常遗憾,UBI的初始时间和Flash擦除块多少成正比。这意味着Flash越大,UBI系统初始化的时间就越长。从linux V3.7开始UBi系统推出了一个新的特性叫做FastMap,这个特性使得系统链接初始化UBI的时间是一个常数。

UBI链接一个MTD设备的时候,首先去扫描这个MTD设备,从每一块物理块中读取EC和VID头,也就是从norflash中读取头128字节,或者从NandFlash中读取每个擦除块的头两页(对于有子页的就是读取头两个子页)。不管怎么样,这都要比jffs2挂载mtd设备读取的内容少很多。UBI链接一个mtd设备比jffs挂载一个mtd设备要快很多倍。

UBI要为没一个EC头和VID头做CRC校验,这会花费一定的cpu运算时间,但是和Flash的IO时间相比是非常微小的。

UBI的实现细节

要实现UBI的功能,UBI系统必须管理三张表,如下

第一张表就是 volume table,这个表记录了和卷相关的一些信息,比如卷大小,标记flag等等。这个表直接记录在Flash上面。

第二张表就是eraseblock association
table,这个表的作用就是记录逻辑卷到物理卷的映射,当上层软件操作写一个逻辑卷的时候,UBI系统首先将逻辑卷号转换为物理卷号,然后将内容写入到对应的物理卷上面。这个表只存在于内存中,并没有记录在Flash上面,内存生成这种表的方法是在UBI初始化的时候对系统中的所有物理块进行扫描,然后形成这张表。

第三张表就是物理块上擦除计数的表,这个表主要是在损耗均衡系统中使用到。这个表也不是存在flash上,而是UBI系统初始化的时候通过扫描物理块建成的。

UBI系统中每个擦除块都要花费掉两个page来记录EC header和VID header,这中额外的花费会损耗掉Flash存储数据的空间,在UBI2中,EC header和VID header都会被存储到OOB区域,因为不会损耗Flash存储数据的空间

UBI系统原理-中【转】的更多相关文章

  1. UBI系统原理分析【转】

    转自:http://blog.chinaunix.net/uid-28236237-id-4164656.html 综述 UBI全称Unsorted Block Images,是一种原始flash设备 ...

  2. 摄像头ISP系统原理(中)

    摄像头ISP系统原理(中) AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOCUS ...

  3. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  4. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

  5. JAVA开发者大会:拍拍贷MQ系统原理与应用

    --喜欢记得关注我哟[shoshana]-- 前记: 5月12号参加了JAVA开发者大会,就<拍拍贷消息系统原理及应用> 作者:李乘胜老师 关于PMQ的分享整理一下笔记以及笔记的思考 和复 ...

  6. IEEE1588 PTP对时系统原理及特点

    IEEE1588 PTP对时系统原理及特点 随着网络技术的快速发展,以太网的定时同步精度也在不断入提高,为了适应网络技术的变化,人们开发出了NTP网络时间协议来提高各网络设备的定时同步功能,但在一些对 ...

  7. 摄像头ISP系统原理(下)

    摄像头ISP系统原理(下) l  WDR(Wide Dynamic Range)------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最 ...

  8. 摄像头ISP系统原理(上)

    摄像头ISP系统原理(上) ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号.它在相机系统中占有核心主导的地位,是构成相机的重要设备. 主 ...

  9. Android 获取系统相册中的所有图片

    Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...

随机推荐

  1. [LintCode] Parking Lot 停车场问题

    Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...

  2. MySQL数据库基本指令(全)

    数据库基本类型 CHAR 固定长度字符串 char(10) 存两位 占10位 查询有优势VARCHAR 可变长度字符串 varchar(10) 存两位 占两位 存储有优势 枚举类型 只能取一个set类 ...

  3. c# 函数练习

    1.out的使用 2.100以内与7无关的数(个位数是7,十位数是7,7的倍数) 每日一句:不求与人相比,但求超越自己,要哭就哭出激动的泪水,要笑就笑出成长的性格!

  4. IIS 注册4.0 Framework

    打开cmd ,运行如下命令  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i      

  5. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  6. 面试之servlet、过滤器、监听器

    servlet.过滤器.监听器servlet是Java中WEB请求和响应的容器servlet的运行需要在类似tomcat容器中,一个 Web 应用对应一个 Context 容器,也就是 Servlet ...

  7. Android课程---Activity的创建

    一.为了创建一个新的Activity,你需要继承Activity类,定义UI,实现功能.新的Activity的最基本的框架代码如下所示: package com.paad.myapplication; ...

  8. IOS第11天(4:UIDatePicker时间选择,和键盘处理,加载xib文件,代理模式)

    ***控制层 #import "ViewController.h" #import "CZKeyboardToolbar.h" @interface ViewC ...

  9. RDS MySQL 连接数满情况的处理

    RDS MySQL 连接数满情况的处理 RDS MySQL 连接数满有2种情况 1. 空闲连接过多 原因: 应用使用长连接模式 - 对于长连接模式(比如Java应用),应用侧应该配置连接池.连接池的初 ...

  10. java 打开txt文件或者bat文件

    package open_exe; public class OpenExe { public static void openWinExe() { Runtime rn = Runtime.getR ...