轻量级SD卡分区管理实现方法及装置与流程

文档序号:12665687阅读:220来源:国知局
轻量级SD卡分区管理实现方法及装置与流程

本发明涉及安防监控技术领域,尤其涉及一种轻量级SD卡分区管理实现方法及装置。



背景技术:

在安防领域,随着SD卡容量的不断增加,IPC端录像及图片存储的重要性日益明显,而容量的扩大也带来SD卡实现分区管理的需求。目前,常用的实现分区的手段主要是通过fdisk和parted这两个工具来完成。对于fdisk而言,fdisk是基于嵌入式linux操作系统下,需要编写相关脚本来完成模拟交互情景,不方便客户的使用。对于parted而言,parted则针对大容量硬盘比较合适,并且,一般前端产品的文件系统下面没有将parted工具打包进去,如果要使用parted来分区,则需要去官网下载parted源码和所依赖的库源码,并将编译后的parted可执行文件和库打包到文件系统中,使用起来相对比较复杂。此外,将parted工具通常应用于硬盘环境中,若将其用在容量(<500G)比硬盘来说小很多的SD卡中,有些杀鸡用牛刀的感觉。

有鉴于此,有必要对上述的SD卡的分区管理方法进行进一步的改进。



技术实现要素:

为解决上述至少一技术问题,本发明的主要目的是提供一种轻量级SD卡分区管理实现方法。

为实现上述目的,本发明采用的一个技术方案为:提供一种轻量级SD卡分区管理实现方法,包括如下步骤:

清除待分区SD卡的MBR中的数据;

导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;

刷新已分区的SD卡,以获得创建的分区数目;

对创建的每一分区进行格式化,以实现新建分区的外部调用。

在一些实施例中,所述导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区的步骤,具体包括:

初始化待分区SD卡的全局扇区,以定义出全局扇区信息、扇区偏移地址、用于存放MBR中数据的MBRbuffer,以及利用SD读卡设备读取MBR中数据的MBRbuffer;

设置分区表信息,根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,以及根据分区数量重新划分各分区大小及对应的分区配置信息;

根据各分区大小及分区配置信息创建SD分区。

在一些实施例中,所述根据各分区大小及分区表创建SD分区的步骤之后,还包括:写分区表的步骤,具体包括:

将扇区结束标志写入创建SD分区的MBR中,以及

将所述分区配置信息写入MBR的分区表中;

更新分区表信息。

在一些实施例中,所述清除待分区SD卡的MBR中的数据的步骤,具体包括:

选定一待分区的SD卡,并利用SD读卡设备读取并驱动待分区的SD卡;

创建512字节的buffer,并在buffer的前510个字节中全部填充0,后两个字节中填充分隔标识;

将buffer中的512字节数据写入待分区SD卡的MBR中,以清除待分区SD卡的MBR中的数据。

在一些实施例中,所述刷新已分区的SD卡,以获得创建的分区数目的步骤,具体包括:

利用proc/partition文件读取已分区SD卡的分区表;

依次遍历SD卡创建的所有分区;

统计SD卡创建的分区数目。

为实现上述目的,本发明采用的另一个技术方案为:提供一种轻量级SD卡分区管理实现装置,包括:

清除模块,用于清除待分区SD卡的MBR中的数据;

分区模块,用于导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;

刷新模块,用于刷新已分区的SD卡,以获得创建的分区数目;

格式化处理模块,用于对创建的每一分区进行格式化,以实现新建分区的外部调用。

在一些实施例中,所述分区模块,具体包括:

初始化单元,用于初始化待分区SD卡的全局扇区,以定义出全局扇区信息、扇区偏移地址、用于存放MBR中数据的MBRbuffer,以及利用SD读卡设备读取MBR中数据的MBRbuffer;

分区表设置单元,用于设置分区表信息,根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,以及根据分区数量重新划分各分区大小及对应的分区配置信息;

创建分区单元,用于根据各分区大小及分区配置信息创建SD分区。

在一些实施例中,所述分区模块还包括写入单元,用于:

将扇区结束标志写入创建SD分区的MBR中,以及

将所述分区配置信息写入MBR的分区表中;

更新分区表信息。

在一些实施例中,所述清除模块,具体用于:

选定一待分区的SD卡,并利用SD读卡设备读取并驱动待分区的SD卡;

创建512字节的buffer,并在buffer的前510个字节中全部填充0,后两个字节中填充分隔标识;

将buffer中的512字节数据写入待分区SD卡的MBR中,以清除待分区SD卡的MBR中的数据。

在一些实施例中,所述刷新模块,具体用于:

利用proc/partition文件读取已分区SD卡的分区表;

依次遍历SD卡创建的所有分区;

统计SD卡创建的分区数目。

本发明的技术方案通过采用清除待分区SD卡的MBR中的数据;然后导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;再刷新已分区的SD卡,以获得创建的分区数目,最后对创建的每一分区进行格式化,以实现新建分区的外部调用,能够减少交互式环节处理,避免其在非交互式应用上需要加入特殊的脚本处理,使用起来更简洁方便。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。

图1为本发明轻量级SD卡分区管理实现方法一实施例的方法流程图;

图2为图1中的步骤S20的流程示意图;

图3为本发明轻量级SD卡分区管理实现装置一实施例的模块方框图;

图4为图3中的分区模块具体的模块方框图;

图5为SD卡分区的结构示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

本方案中采用广义的MBR定义(0扇区)描述,一共<512bytes>包含如下三个部分:主引导扇区<446bytes>:存放的都是操作系统的LOADER;主分区表<64bytes>:最多只能分四个主分区,每个主分区的记录(相关信息,比如分区大小,位置)在主分区表里占14bytes,请参照图5。如果要创建多于四个的分区,就要拿出一个主分区作为扩展分区,再在扩展分区里面进行其它的分区操作。在创建扩展分区的时候会建立一张对应的扩展分区表,它记录了在这个扩展分区里的分区的相关信息;理论上它没有分区数量的限制,在扩展分区内部的分区叫做逻辑分区;分隔标识<2bytes>:值为0x55AA或0xAA55,取决于处理器类型,如果是小端模式处理器(如Intel系列),则该值为0xAA55;如果是大端模式处理器(如Motorola6800),则该值为0x55AA。

请参照图1,在本发明实施例中,该轻量级SD卡分区管理实现方法,包括如下步骤:

步骤S10、清除待分区SD卡的MBR中的数据;

步骤S20、导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;

步骤S30、刷新已分区的SD卡,以获得创建的分区数目;

步骤S40、对创建的每一分区进行格式化,以实现新建分区的外部调用。

目前,对容量小于500G的SD卡分区通常使用fdisk工具,fdisk是基于嵌入式linux操作系统下,需要编写相关脚本来完成模拟交互情景,不方便客户的使用。为此,本实施例中通过分区管理的方法来实现,相比于现有技术,本方案通过分区管理预先封装分区函数,根据分区函数及导入预设的分区数量可以对SD卡进行分区处理,无需编写相关脚本来完成模拟交互情景,最终新建的SD卡分区能够适合外部调用,通过上述方法能够更加方便用户的使用。对于步骤S40而言,需要注意的是在外部调用过程中最后需要去格式化创建好的每个分区,否则无法使用这些分区。格式化跟常规格式化一样,使用mkfs.vfat或者mkdosfs命令。而本实施例更具体的其他步骤,请参照下述的实施例。

本发明的技术方案通过采用清除待分区SD卡的MBR中的数据;然后导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;再刷新已分区的SD卡,以获得创建的分区数目,最后对创建的每一分区进行格式化,以实现新建分区的外部调用,能够减少交互式环节处理,避免其在非交互式应用上需要加入特殊的脚本处理,使用起来更简洁方便。

请参照图2,在一些实施例中,所述导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区的步骤S20,具体包括:

步骤S21、初始化待分区SD卡的全局扇区,以定义出全局扇区信息、扇区偏移地址、用于存放MBR中数据的MBRbuffer,以及利用SD读卡设备读取MBR中数据的MBRbuffer;本实施例中,扇区偏移地址为0。

步骤S22、设置分区表信息,根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,以及根据分区数量重新划分各分区大小及对应的分区配置信息;本步骤中在设置分区表过程中主要是直接调用ioctl去操作BLKGETSIZE和HDIO_GETGEO设备来获取到磁头信息、扇区个数、柱面大小等,并根据需要创建的分区个数来重新计算得到每个分区的大小,起始位置等等。

步骤S23、根据各分区大小及分区配置信息创建SD分区。

本步骤中,在创建SD分区时,需要先定义分区表结构信息并需要分配512字节的内存MBRbuffer,用以存放分区表信息。根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,可以将初始化的扇区信息与分区表信息对应,如此,可以计算柱面,磁头,扇区的起始地址和结束地址。根据导入的分区个数及参数设备名称可以重新划分各分区大小及对应的分区配置信息,以创建SD分区。可以理解的,在这传入数据之前还应该包括,对传入的参数设备名称以及分区个数进行阈值判断,当小于阈值时则满足分区要求,并执行分区操作,否则返回错误码,外部调用层可根据错误码给出不同的下一步操作。例如,如果全部在主分区中进行分区,则分区个数不得超过4个;超过4个分区个数,即判断为不合法分区。

请继续参照图2,在一些实施例中,所述根据各分区大小及分区表创建SD分区的步骤之后,还包括步骤:写分区表的步骤S24,具体包括:

将扇区结束标志写入创建SD分区的MBR中,以及

将所述分区配置信息写入MBR的分区表中;

更新分区表信息。

本步骤中,设置好的分区信息写入MBR中,同时将MBR的分割标识0x55AA/0xAA55写入最后两个字节,更新分区表信息后,即可完成这些写入操作。需要注意的是,在设置分区开始扇区数时需要注意大小端转换问题,调试的设备采用的是大端模式,所以需要进行小端转换。

在一些实施例中,所述清除待分区SD卡的MBR中的数据的步骤S10,具体包括:

选定一待分区的SD卡,并利用SD读卡设备读取并驱动待分区的SD卡;

创建512字节的buffer,并在buffer的前510个字节中全部填充0,后两个字节中填充分隔标识;

将buffer中的512字节数据写入待分区SD卡的MBR中,以清除待分区SD卡的MBR中的数据。

本步骤中,通过选定待分区的SD卡,可以利用SD读卡设备读取并驱动待分区的SD卡;通过在创建的512字节的buffer的前510个字节中全部填充0,后两个字节中填充分隔标识,以及将buffer中的512字节数据写入待分区SD卡的MBR中,可以实现清除待分区SD卡的MBR中的数据的目的。

在一些实施例中,所述刷新已分区的SD卡,以获得创建的分区数目的步骤S30,具体包括:

利用proc/partition文件读取已分区SD卡的分区表;

依次遍历SD卡创建的所有分区;

统计SD卡创建的分区数目。

本步骤,需要调用ioctl操作BLKRRPART设备打开/proc/partition文件重新读取编辑过的分区表信息,去除/n意外的其他字符以及,去掉flash(mtd),最后关闭/proc/partition文件,完成刷新分区信息,能够确保分区操作成功。

请参照图3,本发明的实施例中,该轻量级SD卡分区管理实现装置,包括:

清除模块,用于清除待分区SD卡的MBR中的数据;

分区模块,用于导入预设的分区数量并调用预设的已封装的分区函数,利用分区函数及分区数量对SD卡进行分区处理,并创建SD分区;

刷新模块,用于刷新已分区的SD卡,以获得创建的分区数目;

格式化处理模块,用于对创建的每一分区进行格式化,以实现新建分区的外部调用。

本方案通过分区管理预先封装分区函数,根据分区函数及导入预设的分区数量可以对SD卡进行分区处理,无需编写相关脚本来完成模拟交互情景,最终新建的SD卡分区能够适合外部调用,通过上述方法能够更加方便用户的使用。对于格式化处理模块而言,需要注意的是在外部调用过程中最后需要去格式化创建好的每个分区,否则无法使用这些分区。格式化跟常规格式化一样,使用mkfs.vfat或者mkdosfs命令。而本实施例更具体的其他步骤,请参照下述的实施例。

请参照图4,在一些实施例中,所述分区模块,具体包括:

初始化单元,用于初始化待分区SD卡的全局扇区,以定义出全局扇区信息、扇区偏移地址、用于存放MBR中数据的MBRbuffer,以及利用SD读卡设备读取MBR中数据的MBRbuffer,其中,扇区偏移地址为0。

分区表设置单元,用于设置分区表信息,根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,以及根据分区数量重新划分各分区大小及对应的分区配置信息,其中,在设置分区表过程中主要是直接调用ioctl去操作BLKGETSIZE和HDIO_GETGEO设备来获取到磁头信息、扇区个数、柱面大小等,并根据需要创建的分区个数来重新计算得到每个分区的大小,起始位置等等。

创建分区单元,用于根据各分区大小及分区配置信息创建SD分区。

本实施例中,在创建SD分区时,需要先定义分区表结构信息并需要分配512字节的内存MBRbuffer,用以存放分区表信息。根据设定的分区函数直接调用SD读卡设备,以获取SD卡的容量及物理参数,可以将初始化的扇区信息与分区表信息对应,如此,可以计算柱面,磁头,扇区的起始地址和结束地址。根据导入的分区个数及参数设备名称可以重新划分各分区大小及对应的分区配置信息,以创建SD分区。可以理解的,在这传入数据之前还应该包括判断单元,以对传入的参数设备名称以及分区个数进行阈值判断,当小于阈值时则满足分区要求,并执行分区操作,否则返回错误码,外部调用层可根据错误码给出不同的下一步操作。例如,如果全部在主分区中进行分区,则分区个数不得超过4个;超过4个分区个数,即判断为不合法分区。

请继续参照图4,在一些具体的实施例中,所述分区模块还包括写入单元,还用于:

将扇区结束标志写入创建SD分区的MBR中,以及

将所述分区配置信息写入MBR的分区表中;

更新分区表信息。

本实施例中,写入单元可以将设置好的分区信息写入MBR中,同时将MBR的分割标识0x55AA/0xAA55写入最后两个字节,更新分区表信息后,即可完成这些写入操作。需要注意的是,在设置分区开始扇区数时需要注意大小端转换问题,调试的设备采用的是大端模式,所以需要进行小端转换。

在一些实施例中,所述清除模块,具体用于:

选定一待分区的SD卡,并利用SD读卡设备读取并驱动待分区的SD卡;

创建512字节的buffer,并在buffer的前510个字节中全部填充0,后两个字节中填充分隔标识;

将buffer中的512字节数据写入待分区SD卡的MBR中,以清除待分区SD卡的MBR中的数据。

本实施例中,清除模块可以通过选定待分区的SD卡,可以利用SD读卡设备读取并驱动待分区的SD卡;通过在创建的512字节的buffer的前510个字节中全部填充0,后两个字节中填充分隔标识,以及将buffer中的512字节数据写入待分区SD卡的MBR中,可以实现清除待分区SD卡的MBR中的数据的目的。

在一些实施例中,所述刷新模块,具体用于:

利用proc/partition文件读取已分区SD卡的分区表;

依次遍历SD卡创建的所有分区;

统计SD卡创建的分区数目。

本实施例中,刷新模块需要调用ioctl操作BLKRRPART设备打开/proc/partition文件重新读取编辑过的分区表信息,去除/n意外的其他字符以及,去掉flash(mtd),最后关闭/proc/partition文件,完成刷新分区信息,能够确保分区操作成功。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1