本发明涉及软件技术领域,尤其涉及一种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设备到指定的访问目录。
以上所揭露的仅为本发明的较佳实施例,不能以此来限定本发明的权利保护范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。