【发明授权】升级包的打包方法以及升级方法_晶晨半导体(上海)股份有限公司_201810202061.4 

申请/专利权人:晶晨半导体(上海)股份有限公司

申请日:2018-03-12

发明/设计人:喻志刚

公开(公告)日:2021-04-27

代理机构:上海申新律师事务所

公开(公告)号:CN108170455B

代理人:俞涤炯

主分类号:G06F8/65(20180101)

地址:201203 上海市浦东新区张江高科技园区郭守敬路351号2号楼647-09室

分类号:G06F8/65(20180101);G06F8/71(20180101)

优先权:

专利状态码:有效-授权

法律状态:2021.04.27#授权;2018.07.13#实质审查的生效;2018.06.15#公开

摘要:本发明提供一种升级包的打包方法以及升级方法,属于嵌入式系统技术领域,包括:预设一非升级分区以存储升级进度信息;根据索引n从头文件中获取数据块大小信息和数据块偏移信息;根据数据块大小信息和数据块偏移信息,获取相应的压缩后的数据块;解压,以得到第一解压数据块;根据分区名称信息和索引n,将第一解压数据块写入相应的待升级分区的写入偏移地址,写入偏移地址为n‑x*数据块大小信息对应的数据块大小,x为相应的待升级分区中的数据块的起始索引;待升级信息。本发明的有益效果:升级包可配置,打包方式灵活;掉电后重新上电可继续掉电前的升级过程,已升级数据无需重新升级,提高升级效率。

主权项:1.一种升级包的升级方法,其特征在于,基于升级包的打包方法,所述升级包包括头文件和数据文件,所述打包方法包括:步骤S1、获取待打包的所述升级包对应的配置文件,对所述配置文件进行解析以获得配置信息和至少一个分区镜像;步骤S2、根据所述配置信息,对每个所述分区镜像分别进行分割,以使每个所述分区镜像拆分成多个数据块;步骤S3、根据所述配置信息,对每个所述数据块分别进行压缩,对压缩后的所有所述数据块进行拼接,以得到所述数据文件,并获取每个压缩后的所述数据块的数据块大小信息、每个压缩后的所述数据块在所述数据文件中的数据块偏移信息;步骤S4、根据所述配置信息、所述数据块大小信息以及所述数据块偏移信息生成所述头文件;步骤S5、对所述头文件和所述数据文件进行拼接,以得到所述升级包;所述升级方法包括:步骤B1、uboot启动过程读取升级标志位及掉电标志位,如果其中有一个标志被置位,则进入步骤B2,否则进入步骤B3;步骤B2、加载升级模块,启动升级系统并进入步骤A1;步骤B3、加载正常的内核模块,启动正常系统应用并退出;步骤A1、预设一非升级分区,于所述非升级分区存储对应所有待升级分区的升级进度信息,所述升级进度信息包括所有所述待升级分区中未进行升级的所述待升级分区的分区名称信息和未进行升级的所述待升级分区中的未进行升级的所述数据块对应的索引n;步骤A2、获取所述索引n,并根据所述索引n从所述头文件中获取相应的压缩后的所述数据块的所述数据块大小信息和所述数据块偏移信息;步骤A3、根据所述数据块大小信息和所述数据块偏移信息,从所述数据文件中获取相应的压缩后的所述数据块;步骤A4、根据所述头文件,对从所述数据文件中获取相应的压缩后的所述数据块进行解压,以得到第一解压数据块;步骤A5、根据所述分区名称信息和所述索引n,将所述第一解压数据块写入相应的所述待升级分区的写入偏移地址,所述写入偏移地址为n-x*所述数据块大小信息对应的数据块大小,所述x为相应的所述待升级分区中的所述数据块的起始索引;步骤A6、所述索引n的值加1,并更新待升级信息,随后转步骤A2。

全文数据:升级包的打包方法以及升级方法技术领域[0001]本发明涉及嵌入式系统技术领域,尤其涉及一种升级包的打包方法以及升级方法。背景技术[0002]目前的嵌入式系统升级模块,都是加入了升级掉电保护的功能,能够保证升级过程掉电之后再次上电,系统能够正常启动或者能够继续升级。[0003]例如现有的一种掉电保护方法,其具体过程为判断升级的过程是否有掉电,若有则不进入可能被破坏的系统,从而达到掉电不变砖的效果。而在现有的另一种掉电保护方法中,其主要体现在硬件层上,在异常掉电时,由电池供电,把内存中未保存的数据保存到非易失性存储介质上,从而保证数据不丢失。[0004]绝大多数升级系统都有掉电保护的功能,升级过程如果掉电了,可以重启升级的,但是,重启升级是从新开始升级,并不能继续上次的升级。之前已经更新过的数据,需要再次写入到存储介质中。[0005]目前的升级的掉电保护,只能够保证升级掉电不变砖,但是相对于升级效率而言,重新上电不能继续上次的升级,效率相对较低。发明内容[0006]针对现有技术中存在的问题,本发明涉及一种升级包的打包方法以及升级方法。[0007]本发明采用如下技术方案:[0008]—种升级包的打包方法,所述升级包包括头文件和数据文件,所述打包方法包括:[0009]步骤S1、获取待打包的所述升级包对应的配置文件,对所述配置文件进行解析以获得配置信息和至少一个分区镜像;[0010]步骤S2、根据所述配置信息,对每个所述分区镜像分别进行分割,以使每个所述分区镜像拆分成多个数据块;[0011]步骤S3、根据所述配置信息,对每个所述数据块分别进行压缩,对压缩后的所有所述数据块进行拼接,以得到所述数据文件,并获取每个压缩后的所述数据块的数据块大小信息、每个压缩后的所述数据块在所述数据文件中的数据块偏移信息;[0012]步骤S4、根据所述配置信息、所述数据块大小信息以及所述数据块偏移信息生成所述头文件;[0013]步骤S5、对所述头文件和所述数据文件进行拼接,以得到所述升级包。[0014]优选的,所述步骤Sl中,所述配置信息包括待升级分区的相关信息、与所述待升级分区一一对应的所述分区镜像的相关信息、预设的所述数据块大小信息、数据压缩方式信息、软件版本信息、以及magic值。[0015]优选的,所述步骤S2中,根据所述配置信息中的所述数据块大小信息对每个所述分区镜像分别进行分割,以使每个所述分区镜像包括多个所述数据块;[0016]每个所述分区镜像中的所述数据块的数量为m+1,包括m个与所述数据块大小信息对应的数据块大小相等的第一分割数据块和一个不大于所述数据块大小信息对应的数据块大小的第二分割数据块。[0017]优选的,所述步骤S3中,根据所述配置信息中的所述数据压缩方式信息,对每个所述数据块分别进行压缩以得到相应的压缩后的所述数据块。[0018]—种升级包的升级方法,基于任意一项所述的打包方法,所述升级方法包括:[0019]步骤AU预设一非升级分区,于所述非升级分区存储对应所有所述待升级分区的升级进度信息,所述升级进度信息包括所有所述待升级分区中未进行升级的所述待升级分区的分区名称信息和未进行升级的所述待升级分区中的未进行升级的所述数据块对应的索引η;[0020]步骤Α2、获取所述索引η,并根据所述索引η从所述头文件中获取相应的压缩后的所述数据块的所述数据块大小信息和所述数据块偏移信息;[0021]步骤A3、根据所述数据块大小信息和所述数据块偏移信息,从所述数据文件中获取相应的压缩后的所述数据块;[0022]步骤Α4、根据所述头文件,对从所述数据文件中获取相应的压缩后的所述数据块进行解压,以得到第一解压数据块;[0023]步骤Α5、根据所述分区名称信息和所述索引η,将所述第一解压数据块写入相应的所述待升级分区的写入偏移地址,所述写入偏移地址为η-χ*所述数据块大小信息对应的数据块大小,所述X为相应的所述待升级分区中的所述数据块的起始索引;[0024]步骤Α6、所述索引η的值加1,并更新所述待升级信息,随后转步骤Α2。[0025]优选的,所述步骤Al包括:[0026]步骤All、获取所述升级包,对所述升级包进行解析以获得所述头文件和所述数据文件;[0027]步骤A12、根据预设规则对所述头文件进行校验,以判断所述头文件是否正确:[0028]若判断结果为是,则转步骤A2;[0029]若判断结果为否,则输出错误信息,随后退出。[0030]优选的,所述步骤Al中,所述分区名称信息用于确定所述待升级分区中未进行升级的所述待升级分区对应的未进行升级的所述分区镜像;[0031]所述索引η用于确定未进行升级的所述分区镜像中未进行升级的压缩后的所述数据块。[0032]优选的,所述步骤Α4中,根据所述头文件中的数据压缩方式信息,对从所述数据文件中获取相应的压缩后的所述数据块进行解压,以得到第一解压数据块。[0033]本发明的有益效果:基于升级包的升级方法,能够减小升级包的体积,升级包可自由配置,可自定义压缩方式,打包方式灵活;基于升级包的打包方法的升级方法,若升级过程中掉电,则重新上电后,能够确定上次的升级位置并确定升级包中未进行升级的数据块,从而继续上次的升级过程,已经升级过的数据不需要再次升级,大大减少升级时间,提高升级效率。附图说明[0034]图1为本发明的一种优选实施例中,升级包的打包方法的流程图;[0035]图2为本发明的一种优选实施例中,升级包的打包方法的流程示意图。[0036]图3为本发明的一种优选实施例中,升级包的升级方法的流程图;[0037]图4为本发明的一种优选实施例中,步骤Al的流程图。具体实施方式[0038]需要说明的是,在不冲突的情况下,下述技术方案,技术特征之间可以相互组合。[0039]下面结合附图对本发明的具体实施方式作进一步的说明:[0040]如图1所示,一种升级包的打包方法,上述升级包包括头文件和数据文件,其特征在于,上述打包方法包括:[0041]步骤S1、获取待打包的上述升级包对应的配置文件,对上述配置文件进行解析以获得配置信息和至少一个分区镜像;[0042]步骤S2、根据上述配置信息,对每个上述分区镜像分别进行分割,以使每个上述分区镜像拆分成多个数据块;[0043]步骤S3、根据上述配置信息,对每个上述数据块分别进行压缩,对压缩后的所有上述数据块进行拼接,以得到上述数据文件,并获取每个压缩后的上述数据块的数据块大小信息、每个压缩后的上述数据块在上述数据文件中的数据块偏移信息;[0044]步骤S4、根据上述配置信息、上述数据块大小信息以及上述数据块偏移信息生成上述头文件;[0045]步骤S5、对上述头文件和上述数据文件进行拼接,以得到上述升级包。[0046]在本实施里中,能够自定义配置信息,从而对升级包的打包格式定义,能够减小升级包的体积,升级包可配置,可自定义压缩方式,打包方式灵活。[0047]较佳的实施例中,上述步骤Sl中,上述配置信息包括待升级分区的相关信息、与上述待升级分区一一对应的上述分区镜像的相关信息、预设的上述数据块大小信息、数据压缩方式信息、软件版本信息、以及magic值。[0048]在本实施例中,使用creat_update_bin·sh及update·conf生成最终的升级包update.bin。升级包包含头文件head信息及数据文件data数据部分。[0049]其中,update,conf配置升级包的待升级分区的相关信息(如,待升级分区的分区名)、与上述待升级分区一一对应的上述分区镜像的相关信息(如,待升级分区对应的分区镜像名称)、数据块大小信息如,每个数据块大小bl〇Ck_size、软件版本信息、数据压缩方式信息以及magic值。head结构为:[0052]较佳的实施例中,上述步骤S2中,根据上述配置信息中的上述数据块大小信息对每个上述分区镜像分别进行分割,以使每个上述分区镜像包括多个上述数据块;[0053]每个上述分区镜像中的上述数据块的数量为m+1,包括m个与上述数据块大小信息对应的数据块大小相等的第一分割数据块和一个不大于上述数据块大小信息对应的数据块大小的第二分割数据块。[0054]较佳的实施例中,上述步骤S3中,根据上述配置信息中的上述数据压缩方式信息,对每个上述数据块分别进行压缩。[0055]继续参照图2,在一个具体实施例中,以imagel与image2两个分区镜像打包成升级包为例,其打包流程如下:[0056]creat_update_bin.sh执行步骤:[0057]1解析update.conf,获取待打包的升级包的相关配置信息,包括待升级分区及分区镜像,bIock_size大小,软件版本,数据压缩方式,magic值等。[0058]⑵按照update.conf中配置的待升级分区对应的分区镜像,根据block_size大小,拆分成多个bl〇Ck_size大小的数据块第一分割数据块),最后一个数据块第二分割数据块可能不足一个block_size大小。[0059]3按照update.conf中配置的压缩方式信息,把每个block数据压缩,把所有的压缩后的数据生成升级包的data数据部分,把每个block压缩后的数据大小及偏移存储在head中,以及每个分区镜像的起始block索引保存到head中。[0000]⑷按照update·conf中配置的magic值,软件版本信息等,生成完整head信息,通过head及data数据,拼接或合并)生成最终的update.bin。[0061]如图3所示,一种升级包的升级方法,基于上述的打包方法,上述升级方法包括:[0062]步骤AU预设一非升级分区,于上述非升级分区存储对应所有上述待升级分区的升级进度信息,上述升级进度信息包括所有上述待升级分区中未进行升级的上述待升级分区的分区名称信息和未进行升级的上述待升级分区中的未进行升级的上述数据块对应的索引η;[0063]步骤Α2、获取上述索引η,并根据上述索引η从上述头文件中获取相应的压缩后的上述数据块的上述数据块大小信息和上述数据块偏移信息;[0064]步骤A3、根据上述数据块大小信息和上述数据块偏移信息,从上述数据文件中获取相应的压缩后的上述数据块;[0065]步骤Α4、根据上述头文件,对从上述数据文件中获取相应的压缩后的上述数据块进行解压,以得到第一解压数据块;[0066]步骤Α5、根据上述分区名称信息和上述索引η,将上述第一解压数据块写入相应的上述待升级分区的写入偏移地址,上述写入偏移地址为η-χ*上述数据块大小信息对应的数据块大小,上述X为相应的上述待升级分区中的上述数据块的起始索引;[0067]步骤Α6、上述索引η的值加1,并更新上述待升级信息,,I-η的数据块为已经升级,η后面的数据块是未升级,随后转步骤Α2。[0068]在本实施例中,由于在打包方法中,基于自定义的配置信息,将待升级分区对应的分区镜像分割成若干个数据块,每个数据库块的数据块大小可以通过数据块大小信息进行自定义,因此,基于升级包的打包方法的升级方法,若升级过程中掉电,则重新上电后,能够确定上次的升级位置并确定升级包中未进行升级的数据块例如未进行升级的分区镜像中的未进行升级的压缩后的数据块),从而继续上次的升级过程,已经升级过的数据不需要再次升级,大大减少升级时间,提高升级效率。[0069]其中,η如果为0,则表示从头开始升级,如果η非0,则表示1-n之间的数据都已经升级过了,则我们从η开始,完成后面剩余的数据块升级。[0070]如图4所示,较佳的实施例中,上述步骤Al包括:[0071]步骤All、获取上述升级包,对上述升级包进行解析以获得上述头文件和上述数据文件;[0072]步骤A12、根据预设规则对上述头文件进行校验,以判断上述头文件是否正确:[0073]若判断结果为是,则转步骤A2;[0074]若判断结果为否,则输出错误信息,随后退出。[0075]在本实施例中,步骤A12中根据预设规则读取update.bin的head信息并校验head信息,从而校验升级包的完整性及合法性,正确,则进入步骤A2,否则,提示升级错误的错误信息,升级失败。[0076]较佳的实施例中,上述步骤Al中,上述分区名称信息用于确定上述待升级分区中未进行升级的上述待升级分区对应的未进行升级的上述分区镜像;[0077]上述索引η用于确定未进行升级的上述分区镜像中未进行升级的压缩后的上述数据块。[0078]继续参照图3,较佳的实施例中,上述步骤Α4中,根据上述头文件中的数据压缩方式信息,对从上述数据文件中获取相应的压缩后的上述数据块进行解压,以得到第一解压数据块。[0079]继续参照图3,在一个具体实施例中,[0080]索引为η的单个block更新流程:[0081]1首先从非升级分区获取掉电前最后一次升级的升级进度信息,从而获取分区名称信息和索引n,进而从head信息中,获取此次更新的索引为η的数据块block对应的待升级分区名partiti〇n_name即分区名称信息),根据索引η获取数据块大小信息和数据块偏移信息。[0082]2根据(1中获取的数据块block的数据块大小信息和数据块偏移信息,从升级包update,bin中读取此block的压缩数据并按照head信息中定义的压缩格式解压,由压缩方式信息获取此压缩格式。[0083]3把解压后的block的数据,写入到partition_name分区的偏移block_sizeη-x处,我们可以通过头信息获取数据块η所在的分区,以及分区的写入偏移地址为(η-start*上述数据块大小,X即start。[0084]⑷更新升级进度,η值加1,保存η值至非升级分区中。[0085]整体升级流程:[0086]1读取升级包head信息,校验升级包的完整性及合法性,正确,则进入流程3,否则,进入流程2。[0087]⑵提示升级错误信息,升级失败。[0088]3从非升级分区,获取上次升级数据块索引η,如果η为非0,则进入4,否则进入⑸。[0089]⑷显示上次升级进度,从索引为η的数据块开始更新,继续上次的未完成的升级,进入⑹。[0090]5从head描述信息中,以block为单位,逐个更新所有的分区镜像的数据块数据。[0091]⑹参数η复位,设置为0,升级成功。[0092]继续参照图3,在另一个具体实施例中,还包括一个uboot启动流程:[0093]Iuboot启动过程读取升级标志位及掉电标志位,如果其中有一个标志被置位,则进入步骤2,否则进入步骤3。[0094]⑵加载升级模块,启动升级系统。[0095]⑶加载正常的内核模块,启动正常系统应用。[0096]继续参照图3,在另一个具体实施例中,索引为η的单个数据块升级流程:假设block_sizeIM[0097]partitionl对应的数据块信息startIend200[0098]partition2对应的数据块信息start201end500[0099]如果n=ioo[0100]则η=100属于partitionl,我们把索引为η的数据块写入到partitionl分区,偏移地址为(100-1*1M=99M。[0101]如果n=322[0102]则η=322属于partition2,我们把所以为η的数据块写入到partition2分区,偏移地址为(322-201*1M=121M。[0103]通过说明和附图,给出了具体实施方式的特定结构的典型实施例,根据本发明精神,还可作其他的转换。尽管上述发明提出了现有的较佳实施例,然而,这些内容并不作为局限。[0104]对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在权利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。

权利要求:1.一种升级包的打包方法,所述升级包包括头文件和数据文件,其特征在于,所述打包方法包括:步骤S1、获取待打包的所述升级包对应的配置文件,对所述配置文件进行解析以获得配置信息和至少一个分区镜像;步骤S2、根据所述配置信息,对每个所述分区镜像分别进行分割,以使每个所述分区镜像拆分成多个数据块;步骤S3、根据所述配置信息,对每个所述数据块分别进行压缩,对压缩后的所有所述数据块进行拼接,以得到所述数据文件,并获取每个压缩后的所述数据块的数据块大小信息、每个压缩后的所述数据块在所述数据文件中的数据块偏移信息;步骤S4、根据所述配置信息、所述数据块大小信息以及所述数据块偏移信息生成所述头文件;步骤S5、对所述头文件和所述数据文件进行拼接,以得到所述升级包。2.根据权利要求1的打包方法,其特征在于,所述步骤Sl中,所述配置信息包括待升级分区的相关信息、与所述待升级分区一一对应的所述分区镜像的相关信息、预设的所述数据块大小信息、数据压缩方式信息、软件版本信息、以及magic值。3.根据权利要求2的打包方法,其特征在于,所述步骤S2中,根据所述配置信息中的所述数据块大小信息对每个所述分区镜像分别进行分割,以使每个所述分区镜像包括多个所述数据块;每个所述分区镜像中的所述数据块的数量为m+1,包括m个与所述数据块大小信息对应的数据块大小相等的第一分割数据块和一个不大于所述数据块大小信息对应的数据块大小的第二分割数据块。4.根据权利要求2的打包方法,其特征在于,所述步骤S3中,根据所述配置信息中的所述数据压缩方式信息,对每个所述数据块分别进行压缩以得到相应的压缩后的所述数据块。5.—种升级包的升级方法,其特征在于,基于权利要求1-4中任意一项所述的打包方法,所述升级方法包括:步骤AU预设一非升级分区,于所述非升级分区存储对应所有所述待升级分区的升级进度信息,所述升级进度信息包括所有所述待升级分区中未进行升级的所述待升级分区的分区名称信息和未进行升级的所述待升级分区中的未进行升级的所述数据块对应的索引η;步骤Α2、获取所述索引η,并根据所述索引η从所述头文件中获取相应的压缩后的所述数据块的所述数据块大小信息和所述数据块偏移信息;步骤A3、根据所述数据块大小信息和所述数据块偏移信息,从所述数据文件中获取相应的压缩后的所述数据块;步骤Α4、根据所述头文件,对从所述数据文件中获取相应的压缩后的所述数据块进行解压,以得到第一解压数据块;步骤Α5、根据所述分区名称信息和所述索引η,将所述第一解压数据块写入相应的所述待升级分区的写入偏移地址,所述写入偏移地址为η-χ*所述数据块大小信息对应的数据块大小,所述X为相应的所述待升级分区中的所述数据块的起始索引;步骤A6、所述索引η的值加1,并更新所述待升级信息,随后转步骤A2。6.根据权利要求5的升级方法,其特征在于,所述步骤Al包括:步骤Al1、获取所述升级包,对所述升级包进行解析以获得所述头文件和所述数据文件;步骤A12、根据预设规则对所述头文件进行校验,以判断所述头文件是否正确:若判断结果为是,则转步骤A2;若判断结果为否,则输出错误信息,随后退出。7.根据权利要求5的升级方法,其特征在于,所述步骤Al中,所述分区名称信息用于确定所述待升级分区中未进行升级的所述待升级分区对应的未进行升级的所述分区镜像;所述索引η用于确定未进行升级的所述分区镜像中未进行升级的压缩后的所述数据块。8.根据权利要求5的升级方法,其特征在于,所述步骤Α4中,根据所述头文件中的数据压缩方式信息,对从所述数据文件中获取相应的压缩后的所述数据块进行解压,以得到第一解压数据块。

百度查询: 晶晨半导体(上海)股份有限公司 升级包的打包方法以及升级方法