重启挂掉的镜像 镜像自动挂载_linux挂载ubi镜像

本发明涉及软件技术领域,尤其涉及一种ubi设备自动挂载方法。

背景技术:

目前,挂载ubifs通常是先在pc端根据存储器的分区大小配置相关参数,制作ubi镜像,再通过烧录工具或fastboot烧录到目标板上。这种方法存在如下几个不足:分区卷标只能设置成固定大小,并且如果该分区的坏块达到一定的数量将导致挂载失败而无法使用;需要通过pc制作;需要跟整机烧录文件一起打包,占用磁盘空间较大。

因此,现有技术有待进一步改进。

技术实现要素:

本发明提供一种ubi设备自动挂载方法,旨在解决现有技术中的缺陷,实现当ubifs分区出现坏块时,也能成功挂载ubi设备。

为达到上述目的,本发明所采取的技术方案为:

本发明提供一种ubi设备自动挂载方法,包括:

步骤1、mtd设备向ubi发起链接请求;

步骤2、判断mtd设备链接ubi是否成功,是则创建ubi设备,并进入步骤9,否则进入下一步;

步骤3、判断所述链接请求返回的失败类型是否属于ubifs分区坏块增多,是则进入下一步,否则返回步骤1;

步骤4、确定可用peb数量;

步骤5、根据所述可用peb数量确定ubifs分区的卷标大小;

步骤6、创建ubifs分区的卷标参数的配置文件;

步骤7、创建ubi镜像;

步骤8、烧录ubi镜像;

步骤9、挂载ubi设备到指定的访问目录。

具体地,所述步骤4包括:

步骤401、获取flash的物理分区大小;

步骤402、根据第一预设公式确定可用peb数量。

具体地,所述第一预设公式为n=[1024*m*k/p],其中n表示可用peb数量,m表示flash的物理分区大小,单位是mb,k为阈值系数,p表示单位peb的大小,单位是kb,[]表示取整。

具体地,所述ubifs分区的卷标大小vol=(n*l)/1024,其中,n表示可用peb数量,l表示单位leb的大小,单位为kb。

具体地,所述步骤7包括:

步骤701、设定最小读写单元、单位leb大小、最大的逻辑块号,生成ubifs文件;

步骤702、将所述ubifs文件转换为可烧录的ubi镜像。

具体地,所述步骤8包括:

步骤801、格式化应用运行分区;

步骤802、将所述ubi镜像写入所述应用运行分区;

步骤803、链接mtd设备到ubi;

步骤804、创建相应的ubi设备。

具体地,所述卷标参数包括卷标名称、卷标大小、类型和标志。

具体地,所述配置文件存储在内存临时分区。

本发明的有益效果在于:本发明通过确定可用peb数量、ubifs分区的卷标大小,创建ubifs分区的配置文件,从而创建、烧录ubi镜像,自动挂载ubi设备到指定的访问目录,实现了当ubifs分区出现坏块时,也能成功挂载ubi设备。

附图说明

图1是本发明的ubi设备自动挂载方法的流程示意图。

具体实施方式

下面结合附图具体阐明本发明的实施方式,附图仅供参考和说明使用,不构成对本发明专利保护范围的限制。

如图1所示,本发明的实施例提供一种ubi设备自动挂载方法,包括:

步骤1、mtd设备向ubi发起链接请求。

mtd全称是memorytechnologydevice,即内存技术设备,是用于访问存储器设备(如rom、flash)的linux子系统。mtd的主要目的是为了使新的存储器设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。

ubi全称是unsortedblockimages,即无序区块镜像,是一种类似于lvm的逻辑卷管理层,主要实现损益均衡、逻辑擦除块、卷管理、坏块管理等。

步骤2、判断mtd设备链接ubi是否成功,是则创建ubi设备,并进入步骤9,否则进入下一步。

步骤3、判断所述链接请求返回的失败类型是否属于ubifs分区坏块增多,是则进入下一步,否则返回步骤1。

ubifs全称是unsortedblockimagesfilesystem,即无序区块镜像文件系统,是基于ubi的flash文件系统。

启动时,如果ubifs分区坏块增多,将导致mtd设备链接ubi失败,链接命令ubiattach会返回“noenoughphysicaleraseblocks”的错误日志。

步骤4、确定可用peb数量。

peb全称是physicaleraseblock,即物理擦除块。

在本实施例中,所述步骤4包括:

步骤401、获取flash的物理分区大小;

步骤402、根据第一预设公式确定可用peb数量,所述第一预设公式为n=[1024*m*k/p],其中n表示可用peb数量,m表示flash的物理分区大小,单位是mb,k为阈值系数,p表示单位peb的大小,单位是kb,[]表示取整。

步骤5、根据所述可用peb数量确定ubifs分区的卷标大小。

所述ubifs分区的卷标大小vol=(n*l)/1024,其中,n表示可用peb数量,l表示单位leb的大小,单位为kb。

leb全称是logicaleraseblock,即逻辑擦除块。

步骤6、创建ubifs分区的卷标参数的配置文件。

所述卷标参数包括卷标名称(例如app)、卷标大小、类型和标志。

所述配置文件存储在内存临时分区(例如tmp分区)。

例如,存放在如下路径:/tmp/app.ini。

步骤7、创建ubi镜像。

在本实施例中,所述步骤7包括:

步骤701、设定最小读写单元、单位leb大小、最大的逻辑块号,生成ubifs文件。

在本实施例中,所述最小读写单元为nandflash最小i/o读写单元,所述单位leb大小为124kb,所述最大的逻辑块号等于所述可用peb数量。

在具体实施时,通过ubifs文件系统镜像制作命令mkfs.ubifs将一个空目录生成ubifs文件。

步骤702、将所述ubifs文件转换为可烧录的ubi镜像。

在具体实施时,通过格式转换命令ubinize根据所述ubifs分区的卷标参数的配置文件(/tmp/app.ini)将所述ubifs文件转换为可烧录的ubi镜像(/tmp/app.ubi)。

步骤8、烧录ubi镜像。

在本实施例中,所述步骤8包括:

步骤801、格式化应用运行分区;

步骤802、将所述ubi镜像写入所述应用运行分区;

步骤803、链接mtd设备到ubi;

步骤804、创建相应的ubi设备。

步骤9、挂载ubi设备到指定的访问目录。

以上所揭露的仅为本发明的较佳实施例,不能以此来限定本发明的权利保护范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。