嵌入式系统中ubi设备分区快速加载方法

文档序号:10593834阅读:430来源:国知局
嵌入式系统中ubi设备分区快速加载方法
【专利摘要】本发明公开了一种嵌入式系统UBI设备分区快速加载方法,包括UBI设备初始化、UBI设备卸载流程设计和UBI设备加载流程设计;由于压缩包存储的页面数远小于现有扫描需要读取的页面数,可以减少大量系统度外设的DMA中断耗时,进而大幅度节约系统启动时间。
【专利说明】
嵌入式系统中UBI设备分区快速加载方法
技术领域
[0001] 本发明属于计算机嵌入式系统应用领域,具体设及一种嵌入式系统UBI设备分区 快速加载方法。
【背景技术】
[0002] 当前W智能设备为代表的嵌入式产品广泛普及,所依赖的嵌入式平台几乎都使用 支持内存管理单元(MMU)的操作系统。例如,嵌入式Linux系统、基于Linux内核的An化iod系 统,W及在An化iod基础上深度开发的各种变本等。多数嵌入式平台都会使用NAND FLA甜闪 存设备,基于NAND的文件系统也被广泛使用,主要有YAFFS JEFFS2、无排序区块镜像文件系 统(UBIFS)等。UBIFS是针对NAND开发的一种专业闪存日志文件系统,相比较传统的文件系 统具备很多优点。UBIFS文件系统是基于无排序区块镜像化BI)设备层基础上使用,UBI设备 是为管理NAND存储块而设计的一种设备管理接口层。UBI是一种设计用于NAND块设备的管 理接口层,架设于mtd设备之上。UBI对mtd层的物理擦写块(Physical Erase Block,阳B)进 行统一管理,将其打包成逻辑擦写块化Ogical化ase,LEB),内部封装坏块管理、损益均衡 管理W及卷管理等功能,提供给上层文件系统W统一的设备读写接口。UBIFS文件系统层只 需要关注于日志文件管理层的设计,结构上相互独立。系统启动时UBI需要扫描分区中所有 物理存储块(Block)的头信息,进而在内存中建立起管理设备分区的数据结构信息,完成 UBI设备加载,为上层UB WS提供文件操作接口。
[0003] UBI设备分区格式化过程中会对所属存储分区的mtd层物理PEB块进行格式化操 作。UBI向阳B中写入头信息:VID header和ECC header,大小为64字节(B^e),占用阳B前两 个页面(Page),同时在内存中建立起逻辑管理结构。格式化后P邸块被UBI作为逻辑L邸接口 统一使用。系统启动时,UBI设备的加载过程其实就是建立起UBI逻辑管理结构,UBI会依次 扫描分区中的所有物理PEB,读取L邸头信息结构和坏块(Bad Block)标志。UBI设备卸载相 对简单,只需要释放相关内存资源即可。
[0004] UBI设备占用P邸块的前两个页面,每个页面只使用64Bytes用于存储头信息,在大 页面NAND(如4KB、8KB型)中只使用到页面的一小部分存储空间。由于NAND设备的随机读取 (Random read)效率很低,一般驱动程序都会W整页为单位进行DMA读操作。读取P邸的前两 个化ge属于DMA读外设数据的过程,DMA控制器发送读数据命令后需要等待NAND内部wait/ busy(R/B)信号结束才会触发对应端口开始数据采样。NAND内部R/B信号等待时间远大于通 常CPU指令的工作时间,不同制程和款型NAND的内部取数据的R/B信号等待时间约为20US到 IOOus不等。另外,DMA完成从1/0端口采样整个化ge的2112Bytes数据操作也会耗费较长时 间。
[0005] 图1为系统控制器WDMA方式读取NAND化ge数据的耗时分析。图1中WK9K8G08U0M 型NAND作为测试对象,该型NAND的页面结构为2048Bytes数据区(Main da化)加64Bytes冗 余区(Spare data)共2112Bytes [9]。从时序图的分析中可看出,一次DMA页面读取需要指令 00H、5次地址指令AcMress、指令30H、等待NAND内部R/B信号,然后触发1/0端进行2112次下 降沿采样依次读出全部页面数据。其中指令耗时Tcad为I化s,等际指令忙耗时Twb为100ns, 控制器等R/B信号耗时Tr为20ys,下降沿采样周期Trc为25ns。由此可统计出读页面所需时间
TPage
[0006] (1)
[0007]由公式(1)分析可知,读取单位NAND页面数据周期达72.984ys,相对于CPU指令周 期耗时很大,尤其对于高性能嵌入式处理器平台。因此,读外设数据对于系统启动时间来说 是一种较大的负担。UBI加载时需要扫描的P邸越多,意味着加载时间越长。嵌入式平台不断 发展的同时,NAND制程也越来越先进,从43nm发展到28nm工艺,从小容量的单层单元NAND (化C NAND巧Ij大容量的多层单元NAND(MLC NAND)逐渐在智能平台中普及。系统UBI设备分 区也不断扩展,W容纳更多的应用程序和数据,但存在的问题也逐渐显现出来。UBI设备是 依靠扫描分区所有Block的头信息完成加载的,设备分区的不断扩展导致需要扫描的Block 越来越多。由于系统读取外设数据通常是耗时较大的操作,因此会出现设备开机时间变长。 运种情况对于实时便捷性要求较高的嵌入式产品往往比较棘手,能直接影响用户对设备的 使用体验。

【发明内容】

[000引发明目的:针对上述现有技术存在的问题和不足,本发明的目的是提供一种嵌入 式系统UBI设备分区快速加载方法,对UBI设备架构进行研究并重新设计了其架构,提高系 统开机速度,W适应大容量闪存的嵌入式系统发展。
[0009]技术方案:本发明公开了一种嵌入式系统UBI设备分区快速加载方法,包括UBI设 备初始化、UBI设备卸载流程设计和UBI设备加载流程设计;UBI设备卸载流程设计包括W下 步骤:在系统分区格式化中在固定物理位置划分出若干PEB块的预留区域;对内存中UBI管 理信息进行压缩并存入步骤1.1中的预留区域内;
[0010] UBI设备加载流程设计包括W下步骤:从预留区域内读出压缩包,解压即可建立其 UBI管理信息,实现加载;其中,预留区域采用Block循环队列设计进行管理。
[0011] 本发明的方法和现有的UBI加载扫描所有P邸的头信息一样,均可得到前一次设备 卸载时的最后信息记录,由于压缩包存储的页面数远小于现有扫描需要读取的页面数,可 W减少大量系统度外设的DM中断耗时,进而大幅度节约系统启动时间。
[0012] 由于NAND FLA細本身会存在Bad Block问题,W及操作中也可能意外产生Bad Block。因此,不能简单地将UBI压缩包固定在某物理Block。本发明使用Block循环队列设 计,将划分的预留区域的Block统一管理起来,按照队列的方式循环供数据存储线程使用, 确保数据信息安全性和稳定性。
[0013] 作为本发明的进一步优化说明,本发明所述的Block循环队列设计W每个用于队 列循环累加计数作为索引标志位,定位存储位置时,读出最大索引标志位Block X,Block X 即为上一次压缩数据的存储位置,则队列中的下一个Block X+1即为本次存储位置,将标志 值最大的索引标志位Block X+1和压缩包一起存入队列完成压缩包更新,可W确保预留区 域的Block被循环使用,提高使用寿命。
[0014] 作为本发明的进一步优化说明,本发明所述的索引标志位为每个Block的化ge的 前四个4B^es。
[0015] 作为本发明的进一步优化说明,本发明所述的UBI设备加载流程设计还包括标志 锁机制,当出现异常错误导致加载异常,利用标志锁机制W采用现有加载方法进行加载,异 常错误包括系统在UBI设备卸载流程中出现错误导致更新压缩包信息失败,或者系统运行 过程中异常导致无法进入UBI设备卸载流程。
[0016] 作为本发明的进一步优化说明,本发明所述的标志锁机制包括表示队列中没有正 确的压缩包可供读取的锁定状态和表示Block X中数据为最新压缩包的开锁状态;
[0017]当最大索引标志位Block X+1中第一个化ge信息为预定义标志锁,表示压缩包处 在锁定状态,意味着当前队列中没有前一次卸载所更新的UBI压缩包可供读取,系统退出加 载流程;当最大索引标志位Block X+1中第一个化ge信息中存储最小UBI压缩包编号信息, 表示压缩包处于开锁状态,意味着Block X中数据为最新压缩包,系统进入加载流程,加载 完成后锁定UBI压缩包队列。UBI设备的前一次运行中,如果出现异常错误导致异常,利用标 志锁方法恢复传统加载方法,防止系统启动崩溃。
[0018] 作为本发明的进一步优化说明,本发明加载完成后,向Block X+1中第一个化ge写 入标志锁,UBI卸载时会将最新UBI压缩包和UBI压缩包信息编号更新到Block X+1中,即覆 盖快速加载后的标志锁,将UBI队列打开,为系统下次启动UBI加载进行状态设置,采用运种 标志锁机制防止系统工作异常。
[0019] 作为本发明的进一步优化说明,本发明UBI设备初始化,在分区格式化中,对预留 区域的Block循环队列进行格式化处理,在队列N个Block中依次递增写入UBI压缩包编号信 息,取值为从0到N-2,Block N-I写入标志锁,分区格式化后,UBI压缩包队列初始化为锁定 状态,第一次开机执行常规扫描加载流程,通过卸载流程建立起第一个UBI压缩包。
[0020] 有益效果:本发明与现有技术相比,具有W下优点:本发明通过采用Block循坏队 列设计确保数据信息安全性和稳定性,利用标志锁机制确保系统运行的健壮性,防止系统 启动崩溃,采用本发明的设计能够大大提高系统开机速度,W适应大容量闪存的嵌入式系 统发展。
【附图说明】
[0021] 图1为本发明【背景技术】中DMA读NAND页面耗时分析示意图;
[0022] 图2为本发明的UBI设备运行原理图;
[0023] 图3为本发明的UBI设备卸载流程图;
[0024] 图4为本发明的UBI设备加载流程图;
[0025] 图5为本发明的UBI设备初始化流程图。
【具体实施方式】
[0026] W下结合具体的实施例对本发明进行详细说明,但同时说明本发明的保护范围并 不局限于本实施例的具体范围,基于本发明中的实施例,本领域普通技术人员在没有作出 创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 现有技术中UBI读取64Bytes头信息需要读整个页面,页面大部分数据为OxFF,大 量的启动时间被耗费在DMA读外设操作上,因此,有必要对UBI进行改进,W适应系统平台不 断升级带来的问题。本实施例中的UBI设备卸载时调用相关线程对UBI管理信息进行压缩处 理,更新至分区中指定的物理存储区域,UBI再次启动加载时调用线程从该区域直接读取压 缩信息即可完成加载,从而节约大量系统开机读外设时间。
[0028] 图2为新架构UBI设备原理图。本实施的设计方案设计充分考虑系统运行的健壮 性。
[0029] 在UBI设备中,系统分区格式化中在固定物理位置划分出若干PEB块的预留区域, 卸载时,调用线程对内存中UBI设备管理信息进行压缩,然后将压缩包信息存储进预留区 域,系统启动UBI设备加载时,调用相关线程从预留区域读出压缩包,直接解压即可建立起 UBI管理信息,完成加载。该方法和传统UBI加载扫描所有P邸的头信息一样,均可得到前一 次设备卸载时的最后信息记录。但由于压缩包存储的页面数远小于常规扫描需要读取的页 面数,可W减少大量系统读外设的DM中断耗时,进而大幅节约系统启动时间。
[0030] 如图3所示,设备卸载时先启动线程对UBI管理信息进行打包压缩处理,具体做法 为申请一块连续内存缓冲区,将UBI管理信息依次拷入缓冲区,然后使用压缩算法对缓冲区 数据进行压缩处理,得到UBI信息压缩包,存储关机时UBI的最后信息。目前很多高端IC平台 都自带有支持高效压缩算法的硬件控制器,基于该类平台时可W使用硬件数据压缩方式将 UBI信息尽可能地压缩到较小格式。UBI分区中逻辑块LEB的头信息VID header和ECC header均为64字节,通常只占用页面的一小部分,在方案测试实验中,整个分区的管理信息 经过压缩处理后通常可W存储在一个阳B块中。
[0031] UBI压缩包制作好后,需要将其更新到预留物理存储区域供下次启动使用。WUBI 压缩包格式大小为一个PEBW内为例,NAND FLA甜存储块Block有使用擦写寿命(Program/ Erase 巧cle,P/E 切cles)问题,常规制程的化C NAND的P/E Cycles约60K~100K,MLC NAND约为3K~5K不等,Block随着擦写次数增加会产生位反转(bit-flip)并逐渐增多导致 ECC无法纠正,同时NAND FLASH本身会存在Bad Block问题,W及操作中也可能意外产生Bad Block,运些因素都会影响系统稳定性。因此,不能简单地将UBI压缩包固定在某物理Block。 本实施例的UBI中使用Block循环队列设计,将划分的预留区域Block统一管理起来,按照队 列的方式循环供数据存储线程使用,确保数据信息安全性和稳定性。如图3中Block循环队 列工作流程设计,预留区域使用Block循环队列管理,每个预留Block的化ge的前四个 4Bytes作为索引标志位,用于队列的循环累加计数。UBI定位存储位置时,遍历队列,读出预 留标志位,标志值最大的B10 C k X即为上一次压缩数据的存储位置,则队列中的下一个 Block X+1即为本次存储位置,将标志位的计数器加1和UBI压缩包一起存入队列,完成UBI 压缩包更新,在遍历队列和更新压缩包的过程中遇到Bad Block就跳过使用下一个。通过一 系列操作流程,使新UBI设备最大程度地克服NAND固有的Bad Block和P/E切Cles问题,确 保系统工作稳定性。
[0032] 系统启动后,UBI设备分区开始执行加载流程。如图2中所示,UBI设备会首先启动 线程尝试从预留区域寻找最新UBI压缩包W实现快速加载。
[0033] UBI设备的前一次卸载操作中,如果预留区域出现大量Bad Block,则会导致定位 储存位置出错W及更新压缩包出错等问题,卸载流程失败。另外,若出现嵌入式系统常见的 意外断电情况,也无法执行UBI卸载流程。运类情况下预留区域均无最新UBI压缩包供加载 读取,本实施例的UBI架构中使用标志锁设计W避免加载流程出错。图4为UBI设备加载工作 流程设计。
[0034] 如图4所示,UBI加载操作中首先启动新线程尝试快速加载。系统从物理预留区域 寻找目标UBI压缩包,对Block循环队列进行遍历,依次读出Block中第一个化ge的前4B^es 存储的压缩包编号信息(UBI index)。若队列中均为Bad Block,则预留区存储块无法使用, 视为极端情况,退出快速加载。遍历完成后定位队列中UBI index最大的Block X,接着检查 紧邻下一个无故障Block X+1作进一步判断:若Block X+1中存储最小UBI index,表示UBI 压缩包队列处于开锁状态,Block X中数据为最新压缩包;若Block X+1中第一个化ge信息 为预定义标志锁,则表示UBI压缩包队列处于锁定状态,意味着当前队列中没有前一次卸载 所更新的UBI压缩包可供读取,推断系统前一次UBI卸载更新压缩包出错,或者发生意外掉 电状况,此时退出快速加载。针对UBI队列开锁状态,直接读取Block X中UBI压缩包,解压数 据包建立起UBI信息结构,实现快速加载,然后在退出前Lock UBI队列:向Block X+1中第一 个化ge写入标志锁。同时,图3分析中,UBI卸载时会将最新UBI压缩包和UBI压缩包信息编号 更新到Block X+1中,即覆盖快速加载后的标志锁,将UBI队列打开,为系统下次启动UBI加 载进行状态设置。采用运种标志锁机制防止系统工作异常。
[0035] 本实施例的UBI加载流程中出现退出快速加载时,则快速加载失败,关闭新线程重 新走常规UBI扫描加载流程。UBI分区格式化中,对Block循环队列进行格式化处理,在队列N 个Block中依次递增写入UBI index,取值为从0到N-2,Block N-I写入标志锁。分区格式化 后,UBI压缩包队列初始化为锁定状态,第一次开机会执行常规扫描加载流程,通过卸载流 程建立起第一个UBI压缩包,为后续运行提供可用信息。图5为设备初始化工作流程图。
[0036] 基于本实施例的UBI设备的分区加载时间普遍缩短约50%左右。设计中采用UBI队 列标志锁机制,测试中加入意外断电操作,重启系统可W按照原始开机速率正常启动。针对 Bad Block问题,现聯中使用指令操作人为将Block循环队列中Block全部标记为Bad,重启 系统后同样按照原始开机速率正常启动。系统健壮较性表现较好。当系统平台中大容量分 区较多时,本实施例的UBI设备可W节省大量系统启动时间,表现十分可观。本实施例的UBI 设计方案在设备分区加载速度上相对原始UBI设备具备很大优势。
【主权项】
1. 嵌入式系统UBI设备分区快速加载方法,其特征在于:包括UBI设备初始化、UBI设备 卸载流程设计和UBI设备加载流程设计; 所述UBI设备卸载流程设计包括以下步骤: 1.1、 在系统分区格式化中在固定物理位置划分出若干PEB块的预留区域; 1.2、 对内存中UBI管理信息进行压缩并存入步骤1.1中的预留区域内; 所述UBI设备加载流程设计包括以下步骤: 2.1、从预留区域内读出压缩包,解压建立其UBI管理信息; 其中,所述预留区域采用Block循环队列设计进行管理。2. 根据权利要求1所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:所述 Block循环队列设计以每个用于队列循环累加计数作为索引标志位,定位存储位置时,读出 最大索引标志位Block X,将Block X+1和压缩包一起存入队列完成压缩包更新。3. 根据权利要求2所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:所述索 引标志位为每个Block的Page的前四个4Bytes。4. 根据权利要求1或3所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:所述 UBI设备加载流程设计包括标志锁机制,当出现异常错误导致加载异常,利用标志锁机制以 采用现有加载方法进行加载,异常错误包括系统在UBI设备卸载流程中出现错误导致更新 压缩包信息失败,或者系统运行过程中异常导致无法进入UBI设备卸载流程。5. 根据权利要求4所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:所述标 志锁机制包括表示队列中没有正确的压缩包可供读取的锁定状态和表示Block X中数据为 最新压缩包的开锁状态; 当最大索引标志位Block X+1中第一个Page信息为预定义标志锁,表示压缩包处在锁 定状态,系统退出加载流程; 当最大索引标志位Block X+1中第一个Page信息中存储最小压缩包编号信息,表示压 缩包处于开锁状态,系统进入加载流程。6. 根据权利要求5所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:加载完 成后,向Block X+1中第一个Page写入标志锁。7. 根据权利要求1所述的嵌入式系统UBI设备分区快速加载方法,其特征在于:所述UBI 设备初始化,在分区格式化中,对预留区域的Block循环队列进行格式化处理,在队列N个 Block中依次递增写入UBI压缩包编号信息,取值为从0到N-2,Block N-I写入标志锁,分区 格式化后,UBI压缩包队列初始化为锁定状态,第一次开机执行常规扫描加载流程,通过卸 载流程建立起第一个UBI压缩包。
【文档编号】G06F9/44GK105955722SQ201610251784
【公开日】2016年9月21日
【申请日】2016年4月20日
【发明人】卫兵, 郭玉堂, 谢飞, 潘洁珠, 张忠祥, 周元元, 方璐
【申请人】合肥师范学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1