CN102945179A - 基于mtd分区的软件升级方法和装置 - Google Patents
基于mtd分区的软件升级方法和装置 Download PDFInfo
- Publication number
- CN102945179A CN102945179A CN2012104923261A CN201210492326A CN102945179A CN 102945179 A CN102945179 A CN 102945179A CN 2012104923261 A CN2012104923261 A CN 2012104923261A CN 201210492326 A CN201210492326 A CN 201210492326A CN 102945179 A CN102945179 A CN 102945179A
- Authority
- CN
- China
- Prior art keywords
- mtd
- description information
- upgrading
- divisional description
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种基于MTD分区的软件升级方法和装置。所述方法包括下述步骤:将预升级MTD分区描述信息和升级数据添加到软件升级文件中;升级过程中读取软件升级文件,解析出预升级MTD分区描述信息和升级数据;根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置;启动***uboot,读取存储在存储器中的预升级MTD分区描述信息,组装MTD分区描述信息写入参数,并写入到***内核中。应用本发明的方法能够在升级过程中对MTD分区描述信息进行升级,提高了存储器MTD分区的可调性和使用灵活性。
Description
技术领域
本发明涉及软件升级技术,具体地说,是涉及一种基于MTD分区的软件升级方法和装置。
背景技术
MTD(memory technology device内存技术设备)是用于访问存储器设备(如Rom)的Linux***的子***,linux ***中必须通过MTD来读写ROM等存储器。
在基于linux***的机顶盒等产品中,作为存储器的flash(最常见的ROM)都被分成若干个MTD分区,每个分区占用一部分flash空间,用来存放独立的程序,完成特定功能。flash的具体分区情况,包括各分区的分区号、分区起始地址、分区大小等通过MTD分区描述信息来描述。由***物理特性所决定,在linux***下,只能通过MTD操作读写数据,而不能直接访问flash。
以机顶盒产品为例,目前,基于linux***的机顶盒,其升级过程通常无法完成MTD分区描述信息的升级,原因在于:
一方面,MTD分区数据是在启动时由uboot通过特定参数写入到内核中的,在整个程序运行期间,MTD分区不能调整。如果要更改特定参数,必须要更改该参数所在的一个存储分区,而由于现有技术中该分区都是没有备份的,对其升级将会存在风险,如果升级失败会导致整个***无法启动。
另一方面,linux***下进行的数据升级更新都是基于MTD分区的,且只能通过MTD进行读写,其擦除分区和写入数据都必须在指定分区内操作。如果要进行数据升级的某个MTD分区和原有MTD分区不一致,单独使用基于MTD的指令不能完成软件升级需求。
由于无法对MTD分区描述信息进行升级,因而不能对flash的MTD分区进行调整,致使存储器分区灵活性较差,升级实用性不强,不利于产品的灵活升级和产品周期维护成本的降低。
发明内容
本发明针对现有技术中MTD分区描述信息不能升级而存在的上述缺点提供了一种基于MTD分区的软件升级方法和装置,应用该方法能够在升级过程中对MTD分区描述信息进行升级,从而提高了存储器MTD分区的可调性和使用灵活性。
为实现上述发明目的,本发明提供的升级方法采用下述技术方案予以实现:
一种基于MTD分区的软件升级方法,在基于MTD分区的存储器中预先设置至少两个分区,分别存储相同内容的、升级之前的原MTD分区描述信息,所述升级方法包括下述步骤:
a1、将预升级MTD分区描述信息和升级后的每个MTD分区中的升级数据添加到软件升级文件中,预升级MTD分区描述信息对应的升级后的MTD分区中包括有至少两个用来存储预升级MTD分区描述信息的MTD分区;
a2、升级过程中读取软件升级文件,解析出预升级MTD分区描述信息和升级数据;
a3、读取存储器的原MTD分区描述信息,根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置;
a4、启动***的uboot,读取存储在存储器中的预升级MTD分区描述信息,组装MTD分区描述信息写入参数,并将该参数写入到***内核中。
如上所述的方法,所述原MTD分区描述信息优选以XML文件形式存储在存储器中,所述预升级分区描述信息优选以XML文件形式添加到软件升级文件中。
如上所述的方法,为减少对存储器存储区域的占用,在基于MTD分区的存储器中预先设置有两个存储所述原MTD分区描述信息的分区;所述预升级分区描述信息对应的升级后的MTD分区中包括有两个用来存储预升级MTD分区描述信息的MTD分区。
如上所述的方法,为简化数据写入过程、提高升级速度,所述步骤a3具体包括下述子步骤:
a31、将预升级MTD分区描述信息和升级数据分别分割成若干个指定大小的子块;
a32、根据预升级MTD分区描述信息中的MTD分区起始地址和当前要写入的子块在其所属预升级MTD分区描述信息或升级数据的所有子块中的位置计算子块的起始地址;
a33、读取所述原MTD分区描述信息,根据该原MTD分区描述信息和子块的起始地址获取该子块所对应的原MTD分区的起始地址和偏移地址;
a34、根据原MTD分区的起始地址和偏移地址擦除与子块大小相等的存储区域;
a35、将子块的数据写入到擦除后的存储区域中。
如上所述的方法,所述子块的大小优选与所述基于MTD分区的存储器的一个擦除操作单元的大小相等。
如上所述的方法,为简化数据结构,便于数据的传输和正确解析,所述软件升级文件包括有依次存储的预升级MTD分区描述信息校验字段、预升级MTD分区描述信息长度字段、预升级MTD分区描述信息、升级后的每个MTD分区中的升级数据校验字段、升级数据的长度字段及升级数据。
优选的,所述预升级MTD分区描述信息校验字段和所述升级数据校验字段均为CRC校验字段。
为实现前述发明目的,本发明提供的升级装置采用下述技术方案来实现:
一种基于MTD分区的软件升级装置,该装置包括:
原MTD分区描述信息存储单元,用来存储原MTD分区描述信息;
至少一个原MTD分区描述信息备份存储单元,作为备份存储单元,存储与原MTD分区描述信息存储单元相同内容的原MTD分区描述信息;
软件升级文件接收和存储单元,用来接收外部传输的软件升级文件并存储;
预升级MTD分区描述信息解析单元,与软件升级文件接收和存储单元相连接,用来从软件升级文件中解析出预升级MTD分区描述信息;
升级数据解析单元,与软件升级文件接收和存储单元相连接,用来从软件升级文件中解析出升级后的每个MTD分区中的升级数据;
数据写入单元,与预升级MTD分区描述信息解析单元、升级数据解析单元及原MTD分区描述信息存储单元和原MTD分区描述信息备份存储单元相连接,用来根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置;
uboot处理单元,用来执行uboot有关工作,并将相关写入参数写入到***内核中;
写入参数组装单元,与预升级MTD分区描述信息解析单元和uboot处理单元相连接,用来组装MTD分区描述信息写入参数,并将该参数传输至uboot处理单元。
如上所述的装置,所述原MTD分区描述信息存储单元及所述原MTD分区描述信息备份存储单元中优选以XML文件形式存储MTD分区描述信息;所述预升级MTD分区描述信息优选以XML文件形式存储在所述软件升级文件中。
如上所述的装置,为简化升级数据写入过程、提高升级速度,所述数据写入单元包括下述子单元:
子块分割子单元,用来将预升级MTD分区描述信息和升级数据分别分割成若干个指定大小的子块;
子块起始地址确定子单元,与所述预升级MTD分区描述信息解析单元和子块分割子单元相连接,用来根据预升级MTD分区描述信息中的MTD分区起始地址和当前要写入的子块在其所属预升级MTD分区描述信息或升级数据的所有子块中的位置计算子块的起始地址;
子块映射地址确定子单元,与子块起始地址确定子单元和所述原MTD分区描述信息存储单元及原MTD分区描述信息备份存储单元相连接,根据原MTD分区描述信息和子块的起始地址获取该子块所对应的原MTD分区的起始地址和偏移地址,作为子块的映射地址;
数据擦除子单元,与子块映射地址确定子单元相连接,用来根据原MTD分区的起始地址和偏移地址擦除与子块大小相等的存储区域中的数据;
子块数据写入子单元,与子块映射地址确定子单元和子块分割子单元相连接,用来将子块的数据写入到擦除后的存储区域中。
与现有技术相比,本发明的优点和积极效果是:
1、通过在存储器中选择两个分区分别存储相同内容的MTD分区描述信息,形成描述信息的有效备份,然后在软件升级升级过程中以升级方式写入预升级的MTD分区描述信息,在下次***的uboot启动时,根据预留分区的MTD分区描述信息重新组装写入参数写入到***内核中,实现MTD分区描述信息的升级,提高了存储器MTD分区的可调性和使用灵活性。而且,由于有备份信息存在,即使升级过程中断电也不会丢失数据,确保了在软件升级过程中升级MTD分区描述信息的安全性。
2、在对升级后的MTD分区中写入升级数据及预升级MTD分区描述信息时,通过将要写入的数据分成多个子块,然后将子块映射到原MTD分区中依次写入,确保子块数据在同一个原分区中写入,不会出现跨越原分区的现象,提高了数据写入的准确性和写入速度。
结合附图阅读本发明的具体实施方式后,本发明的其他特点和优点将变得更加清楚。
附图说明
图1是本发明基于MTD分区的软件升级方法一个实施例的主流程图;
图2是图1实施例中根据升级后的MTD分区写入升级数据的流程图;
图3是本发明基于MTD分区的软件升级装置一个实施例的结构框图。
具体实施方式
下面结合附图和具体实施方式对本发明的技术方案作进一步详细的说明。
请参考图1和图2所示的本发明基于MTD分区的软件升级方法一个实施例的流程图,其中,图1是该实施例的主流程图,图2是根据升级后的MTD分区写入升级数据的流程图。
该实施例以具有linux操作***的机顶盒产品软件升级为例,机顶盒的flash存储器被划分为多个MTD分区,除了存储MTD分区描述信息和功能软件程序之外,还有一些预留的、未定义的MTD分区。 应用该实施例的方法对机顶盒进行软件升级时,除了能够进行常规的功能软件程序的升级数据升级之外,还可以在升级过程中实现对MTD分区描述信息的升级。
请参考图1,该实施例同时实现升级数据和MTD分区描述信息升级的具体过程如下:
步骤101:流程开始。
步骤102:在基于MTD分区的flash存储器中选择两个预留分区。这两个预留分区将以XML文件形式存储升级之前的原MTD分区描述信息。且这两个预留分区中存储的文件内容相同,也即有一个为备份分区,以实现MTD分区描述信息的有效备份。
原MTD分区描述信息一般包括有分区号、分区起始地址和分区大小等字段内容。
步骤103:将预升级MTD分区描述信息以文件形式添加到软件升级文件中,与升级数据构成软件升级文件。
预升级MTD分区描述信息也以XML文件形式编辑,用来描述预升级MTD分区信息,包括有预升级的MTD分区的分区号、分区起始地址、分区大小等信息。该预升级MTD分区描述信息与升级后的每个MTD分区中的升级数据按照一定的数据格式进行组装,形成软件升级文件。
举例来说,可以将预升级MTD分区描述信息文件放到最前面,以便于方便地获取到。具体组织格式为:将预升级MTD分区描述信息校验字段、预升级MTD分区描述信息长度字段、预升级MTD分区描述信息、升级后的每个MTD分区中的升级数据校验字段、升级数据的长度字段及升级数据从头开始依次组装。若有多个升级数据,则先组装第一个升级数据的校验字段、长度字段和升级数据,然后再组装其他升级数据的校验字段、长度字段和升级数据。按照这种特定的数据格式形成软件升级文件之后,软件升级程序可以方便地从软件升级文件中获取到所需的MTD分区描述信息文件和该文件所描述的每个升级数据。
其中,预升级的MTD分区描述信息文件的校验字段和所述升级数据校验字段均采用CRC校验字段。
而且,与步骤102中升级之前的原MTD分区描述信息的备份存储相对应,预升级MTD分区描述信息对应的升级后的MTD分区中包括有两个用来存储预升级MTD分区描述信息的MTD分区。
步骤104:机顶盒linux***进入软件升级过程,读取软件升级文件。
该过程的具体实现为现有技术,在此不作具体阐述。
步骤105:从读取到的软件升级文件中解析出预升级MTD分区描述信息和升级数据。
步骤106:将预升级MTD分区描述信息写入到升级后的MTD分区。
步骤107:将升级数据写入到升级后的MTD分区内。
预升级MTD分区描述信息将作为升级数据的一种,与其他软件升级数据等一起写入到存储器相应存储位置。在写入时,将读取存储器的原MTD分区描述信息,根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置。
升级数据可以通过MTD命令写入到由预升级的MTD分区描述信息所对应的升级后的MTD分区内。具体的一个实现过程请参考图2及下述对图2的描述。
在该实施例中,预升级MTD分区描述信息会依次写入到存储器中的两个分区中,且一个分区写完之后才再写入到另一个分区。因此,即使在写入过程中断电,也总能保证至少有一个分区内存储有完整的MTD分区描述信息文件。不管这个完整的MTD分区描述信息是升级之前的信息还是升级之后的信息,均能确保操作***能够正常启动,保证了升级可靠性。
需要说明的是,写入预升级MTD分区描述信息文件的步骤106和写入升级数据的步骤107不一定按照先步骤106再步骤107的顺序,也可以是先写入升级数据、再写入MTD分区描述信息,即先步骤107再步骤106,或者两部分交叉写入。
步骤108:启动机顶盒***的uboot,读取已经存储在存储器中的预升级MTD分区描述信息,组成MTD分区描述信息写入参数。
由于MTD分区描述信息是在机顶盒操作***uboot启动时通过写入参数写入到内核中去的,所以,在将预升级MTD分区描述信息写入到相应升级后的MTD分区中之后,如果没有重新启动机顶盒,***MTD分区描述信息并不会升级。等到升级过程结束,重新启动机顶盒的uboot之后,先读取已经存储在存储器中的预升级MTD分区描述信息、也即升级之后的MTD分区描述信息;然后,利用升级之后的MTD分区描述信息、按照写入参数的格式重新组装MTD分区描述信息写入参数。
当然,如果MTD分区描述信息未升级,则uboot启动后,读取的是预留分区中的原MTD分区描述信息,仍然按照原分区描述信息对存储器进行MTD分区。
步骤109:uboot将写入参数写入到***内核中。
由于写入参数是由升级后的MTD分区描述信息构成的,因此,实现了对MTD分区描述信息的升级。升级之后,flash存储器的MTD分区数量和大小将按照新的分区描述信息来划分,从而提高了存储器MTD分区的可调性和使用灵活性。
而且,在完成MTD分区描述信息的升级之后,预升级MTD分区描述信息将变为原MTD分区描述信息而在存储器中备份存储。
如上所述,由于升级之前的原MTD分区个数、大小与升级之后的MTD分区个数和大小可能都不相同,升级后的一个MTD分区可能跨越原来的多个MTD分区。在机顶盒uboot重启之前的软件升级过程中,要求升级数据(包括预升级MTD分区描述信息)按照升级后的MTD分区进行写入存储。但由于实际MTD分区还没有变化,因此,升级数据要写入的、升级后的分区的起始地址和结束地址不一定在原来某一个分区内。而又由于基于MTD分区的flash又是按照分区进行数据的读写操作,所以,如果直接使用MTD命令完成升级数据的写入将会比较复杂,导致升级速度较慢。
为解决该问题,该实施例结合flash存储器是以块(block,一般为256K个字节)作为擦除操作单元、而MTD分区的大小必须是flash块的整数倍、分区起始地址是flash某个块的起始地址的现状,采用了将要存储的升级数据根据flash擦除操作单元的块的大小进行分割的升级数据写入方法,以保证分割后的数据一定是在一个固定的原MTD分区内,不会出现跨原分区写入的情况,提高了数据写入速度。具体实现过程请参考图2所示。
如图2所示,采用MTD分区和数据分割实现升级数据写入的过程如下:
步骤21:开始升级。
步骤22:从软件升级文件中解析出预升级MTD分区描述信息。
具体来说,是从软件升级文件中的MTD分区描述信息文件中解析出MTD分区描述信息。
步骤23:根据预升级MTD分区描述信息获取到升级后的MTD分区Y0到Ym共m个MTD分区,并从软件升级文件中获取每个分区所对应的升级数据。设置一个变量M,赋初值为0。
步骤24:对YM分区进行数据升级。
这里,以YM代表从Y0到Ym的一个分区,M=0,1,…m。也即从分区Y0开始,依次对m个MTD分区进行数据升级。具体升级过程为步骤241至步骤244的第②部分流程所示。
步骤25:判断所有MTD分区是否都升级完毕。若是,执行步骤26;若否,将变量M加1,再转至步骤24,对下一个分区进行数据升级。
在该实施例中,由于变量M每升级完一个分区,均会自动加1,所以,判断所有MTD分区均升级完毕的依据是变量M是否等于m。若是,说明所有m个分区均升级完毕;若M小于m,说明还有分区未升级,则继续执行升级过程。
步骤26:在所有分区升级完毕后,结束升级数据的写入流程.
以分区YM为例,对该分区写入数据、实现数据升级的过程为:
步骤241:将YM分区中要存储的数据分割成大小为256K个字节的x个子块YM-0到YM-x。
其中,256K个字节是flash存储器一个擦除操作单元的大小。然后,设置一个变量X,赋初值为0。
步骤242:处理YM-X子块的数据升级。
这里,以YM-X代表从YM-0到YM-x中的一个子块,其中,X=0,1,…x。也即从YM-0开始,依次对x个子块分别进行数据的写入升级。每个子块具体写入数据的过程参见步骤2421至步骤2426的第③部分流程所示。
步骤243:判断YM分区中要存储的各子块是否均升级完毕。若是,执行步骤244;否则,将X加1,转至步骤242,继续升级下一个子块数据,直至所有的子块数据均升级完毕。
在该实施例中,由于每升级完一个子块,变量X均会自动加1,所以,判断所有子块均升级完毕的依据是变量X是否等于x。若是,说明所有x个子块均升级完毕;若X小于x,说明还有子块未写入到分区中,则继续执行子块数据的写入过程。
步骤244:在MTD分区YM中的所有子块均写入到相应的分区中之后,YM分区数据升级完成。
步骤242中完成子块YM-X数据升级的具体步骤如下:
步骤2421:计算子块YM-X的起始地址。
在该实施例中,由于将MTD分区YM中的所有升级数据分割成x个大小均为256KB大小的子块,所以,第X个子块YM-X在整个分区中的起始地址与分区YM的起始地址和该子块在该分区内所有子块中的位置有关系。具体来说,当前第X个子块YM-X的起始地址应该是(分区YM的起始地址+256K﹡X)。其中,分区YM的起始地址可以从MTD分区描述信息中获得,因此,子块YM-X的起始地址能够获知。
步骤2422:根据预留分区内升级之前的MTD分区描述信息获取当前子块YM-X对应的原始分区的起始地址和偏移地址。
如前所述,由于要写入的子块YM-X的数据是升级之后的MTD分区YM中的数据,而在***重启之前,当前flash的MTD分区描述信息仍然是升级之前的原MTD分区描述信息,如果采用MTD指令写入子块数据,指令中的起始地址和偏移地址仍然是原MTD分区描述信息中的地址。因此,为方便、准确地将升级数据写入到升级后的MTD分区YM中,需要对升级后的MTD分区YM与升级前的原MTD分区描述信息作地址映射。具体来说,是根据步骤2421中所获得的子块YM-X的起始地址,找到该起始地址在升级之前的原MTD分区描述信息中相对应的原始分区的起始地址和偏移地址。在找到相对应的起始地址和偏移地址之后,就可以直接采用MTD指令进行擦除和写操作。
步骤2423:根据原分区起始地址和偏移地址擦除相应存储区域的数据。
而且,所擦除的MTD分区的大小与待写入的子块YM-X的数据大小是相等的。
步骤2424:读取子块YM-X对应的升级数据。
步骤2425:将子块数据写入到擦除后的存储区域中。
步骤2426:YM-X子块写入完成。
通过采用步骤2421至步骤2426的子块数据写入过程,既能保证分区擦除和数据写入过程均是针对升级之前的同一个MTD分区内进行的操作,且写入的子块数据又是在升级之后所对应的升级MTD分区之内,有效兼顾了数据的写入准确性和升级速度。
请参考图3,该图3所示为本发明基于MTD分区的软件升级装置一个实施例的结构框图。该实施例以具有linux操作***的机顶盒产品软件升级为例,实现基于MTD分区的软件升级装置包括如下相互协同工作的各单元部分:
软件升级文件接收和存储单元301,用来接收外部(传输升级文件的设备)传输的软件升级文件并存储。
预升级MTD分区描述信息解析单元302,与软件升级文件接收和存储单元301相连接,用来从存储的软件升级文件中解析出文件形式存在的预升级MTD分区描述信息。
升级数据解析单元303,与软件升级文件接收和存储单元301相连接,用来从软件升级文件中解析出升级后的每个MTD分区中的升级数据。
原MTD分区描述信息存储单元304,用来存储以文件形式存在的原MTD分区描述信息。
原MTD分区描述信息备份存储单元305,作为备份存储单元,存储与原MTD分区描述信息存储单元304相同形式和内容的原MTD分区描述信息。
在该实施例中,原MTD分区描述信息存储单元304和原MTD分区描述信息备份存储单元305采用机顶盒flash存储器中的两个不同的预留MTD分区来实现,以实现MTD分区描述信息的有效备份。
数据写入单元306,与预升级MTD分区描述信息解析单元302、升级数据解析单元303及原MTD分区描述信息存储单元304和原MTD分区描述信息备份存储单元305相连接,用来根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置。
uboot处理单元308,用来执行uboot有关工作,并将相关写入参数写入到linux***内核309中。
写入参数组装单元307,与预升级MTD分区描述信息解析单元302和uboot处理单元308相连接,用来根据预升级MTD分区描述信息重新组装MTD分区描述信息写入参数,并将该参数传输至uboot处理单元306。
对于同时升级MTD分区描述信息的软件升级来说,升级后的数据是根据升级的MTD分区描述信息所对应的MTD分区来存储的,且预升级MTD分区描述信息也需要写入到升级后的MTD相应分区中。为实现升级后的MTD分区与升级之前的MTD分区的地址映射,保证升级数据的准确、安全升级,数据写入单元可以采用下述结构来实现,具体包括下述子单元:
子块分割子单元,用来将预升级MTD分区描述信息和升级数据分别分割成若干个指定大小的子块;
子块起始地址确定子单元,与所述预升级MTD分区描述信息解析单元和子块分割子单元相连接,用来根据预升级MTD分区描述信息中的MTD分区起始地址和当前要写入的子块在其所属预升级MTD分区描述信息或升级数据的所有子块中的位置计算子块的起始地址;
子块映射地址确定子单元,与子块起始地址确定子单元和所述原MTD分区描述信息存储单元及原MTD分区描述信息备份存储单元相连接,根据原MTD分区描述信息和子块的起始地址获取该子块所对应的原MTD分区的起始地址和偏移地址,作为子块的映射地址;
数据擦除子单元,与子块映射地址确定子单元相连接,用来根据原MTD分区的起始地址和偏移地址擦除与子块大小相等的存储区域中的数据;
子块数据写入子单元,与子块映射地址确定子单元和子块分割子单元相连接,用来将子块的数据写入到擦除后的存储区域中。
该实施例的软件升级装置中的各单元部分协同工作,在有关软件程序的配合下,按照图1和图2的方法流程实现快速、准确的MTD分区描述信息和数据的同时升级。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管参照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。
Claims (10)
1.一种基于MTD分区的软件升级方法,其特征在于,在基于MTD分区的存储器中预先设置至少两个分区,分别存储相同内容的、升级之前的原MTD分区描述信息,所述升级方法包括下述步骤:
a1、将预升级MTD分区描述信息和升级后的每个MTD分区中的升级数据添加到软件升级文件中,预升级MTD分区描述信息对应的升级后的MTD分区中包括有至少两个用来存储预升级MTD分区描述信息的MTD分区;
a2、升级过程中读取软件升级文件,解析出预升级MTD分区描述信息和升级数据;
a3、读取存储器的原MTD分区描述信息,根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置;
a4、启动***的uboot,读取存储在存储器中的预升级MTD分区描述信息,组装MTD分区描述信息写入参数,并将该参数写入到***内核中。
2.根据权利要求1所述的方法,其特征在于,所述原MTD分区描述信息以XML文件形式存储在存储器中,所述预升级分区描述信息以XML文件形式添加到软件升级文件中。
3.根据权利要求1所述的方法,其特征在于,在基于MTD分区的存储器中预先设置有两个存储所述原MTD分区描述信息的分区;所述预升级分区描述信息对应的升级后的MTD分区中包括有两个用来存储预升级MTD分区描述信息的MTD分区。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述步骤a3包括下述子步骤:
a31、将预升级MTD分区描述信息和升级数据分别分割成若干个指定大小的子块;
a32、根据预升级MTD分区描述信息中的MTD分区起始地址和当前要写入的子块在其所属预升级MTD分区描述信息或升级数据的所有子块中的位置计算子块的起始地址;
a33、读取所述原MTD分区描述信息,根据该原MTD分区描述信息和子块的起始地址获取该子块所对应的原MTD分区的起始地址和偏移地址;
a34、根据原MTD分区的起始地址和偏移地址擦除与子块大小相等的存储区域;
a35、将子块的数据写入到擦除后的存储区域中。
5.根据权利要求4所述的方法,其特征在于,所述子块的大小与所述基于MTD分区的存储器的一个擦除操作单元的大小相等。
6.根据权利要求1至3中任一项所述的方法,其特征在于,所述软件升级文件包括有依次存储的预升级MTD分区描述信息校验字段、预升级MTD分区描述信息长度字段、预升级MTD分区描述信息、升级后的每个MTD分区中的升级数据校验字段、升级数据的长度字段及升级数据。
7.根据权利要求6所述的方法,其特征在于,所述预升级MTD分区描述信息校验字段和所述升级数据校验字段均为CRC校验字段。
8.一种基于MTD分区的软件升级装置,其特征在于,所述装置包括:
原MTD分区描述信息存储单元,用来存储原MTD分区描述信息;
至少一个原MTD分区描述信息备份存储单元,作为备份存储单元,存储与原MTD分区描述信息存储单元相同内容的原MTD分区描述信息;
软件升级文件接收和存储单元,用来接收外部传输的软件升级文件并存储;
预升级MTD分区描述信息解析单元,与软件升级文件接收和存储单元相连接,用来从软件升级文件中解析出预升级MTD分区描述信息;
升级数据解析单元,与软件升级文件接收和存储单元相连接,用来从软件升级文件中解析出升级后的每个MTD分区中的升级数据;
数据写入单元,与预升级MTD分区描述信息解析单元、升级数据解析单元及原MTD分区描述信息存储单元和原MTD分区描述信息备份存储单元相连接,用来根据原MTD分区描述信息和预升级MTD分区描述信息中的MTD分区对应关系将预升级MTD分区描述信息和升级数据依次写入至相应存储位置;
uboot处理单元,用来执行uboot有关工作,并将相关写入参数写入到***内核中;
写入参数组装单元,与预升级MTD分区描述信息解析单元和uboot处理单元相连接,用来组装MTD分区描述信息写入参数,并将该参数传输至uboot处理单元。
9.根据权利要求8所述的装置,其特征在于, 所述原MTD分区描述信息存储单元及所述原MTD分区描述信息备份存储单元中以XML文件形式存储MTD分区描述信息;所述预升级MTD分区描述信息以XML文件形式存储在所述软件升级文件中。
10.根据权利要求8或9所述的装置,其特征在于,所述数据写入单元包括下述子单元:
子块分割子单元,用来将预升级MTD分区描述信息和升级数据分别分割成若干个指定大小的子块;
子块起始地址确定子单元,与所述预升级MTD分区描述信息解析单元和子块分割子单元相连接,用来根据预升级MTD分区描述信息中的MTD分区起始地址和当前要写入的子块在其所属预升级MTD分区描述信息或升级数据的所有子块中的位置计算子块的起始地址;
子块映射地址确定子单元,与子块起始地址确定子单元和所述原MTD分区描述信息存储单元及原MTD分区描述信息备份存储单元相连接,根据原MTD分区描述信息和子块的起始地址获取该子块所对应的原MTD分区的起始地址和偏移地址,作为子块的映射地址;
数据擦除子单元,与子块映射地址确定子单元相连接,用来根据原MTD分区的起始地址和偏移地址擦除与子块大小相等的存储区域中的数据;
子块数据写入子单元,与子块映射地址确定子单元和子块分割子单元相连接,用来将子块的数据写入到擦除后的存储区域中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210492326.1A CN102945179B (zh) | 2012-11-28 | 2012-11-28 | 基于mtd分区的软件升级方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210492326.1A CN102945179B (zh) | 2012-11-28 | 2012-11-28 | 基于mtd分区的软件升级方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102945179A true CN102945179A (zh) | 2013-02-27 |
CN102945179B CN102945179B (zh) | 2016-06-29 |
Family
ID=47728128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210492326.1A Active CN102945179B (zh) | 2012-11-28 | 2012-11-28 | 基于mtd分区的软件升级方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102945179B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014206024A1 (zh) * | 2013-06-27 | 2014-12-31 | 中兴通讯股份有限公司 | 一种嵌入式应用实现方法、装置和计算机存储介质 |
CN105094913A (zh) * | 2015-07-31 | 2015-11-25 | 广东欧珀移动通信有限公司 | ***、基带固件和***应用升级方法及装置 |
CN105468393A (zh) * | 2014-09-10 | 2016-04-06 | 启碁科技股份有限公司 | 模块版本升级方法及终端装置 |
CN105653333A (zh) * | 2015-12-31 | 2016-06-08 | 深圳市汇川控制技术有限公司 | 可编程逻辑控制器用户程序在线修改***及方法 |
CN106502750A (zh) * | 2016-10-28 | 2017-03-15 | 青岛海信电器股份有限公司 | Ota升级方法及蓝牙芯片 |
WO2017071646A1 (zh) * | 2015-10-28 | 2017-05-04 | 中兴通讯股份有限公司 | 设备分区信息传递方法及装置 |
CN107025121A (zh) * | 2017-03-31 | 2017-08-08 | 广东欧珀移动通信有限公司 | 软件升级方法、装置和电子装置 |
CN107562572A (zh) * | 2017-08-18 | 2018-01-09 | 上海斐讯数据通信技术有限公司 | 文件下载装置及***软件管理装置 |
CN107608699A (zh) * | 2017-10-17 | 2018-01-19 | 安徽皖通邮电股份有限公司 | 一种基于魔术分区的细粒度软件版本升级方法 |
CN107943504A (zh) * | 2017-12-07 | 2018-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式***中软件模块的动态升级方法 |
CN108196870A (zh) * | 2017-12-29 | 2018-06-22 | 北京臻迪科技股份有限公司 | 升级方法及装置 |
CN113687855A (zh) * | 2021-07-22 | 2021-11-23 | 荣耀终端有限公司 | 电子设备及其***升级包的制作方法、***升级方法 |
CN113691845A (zh) * | 2021-08-19 | 2021-11-23 | 杭州国芯科技股份有限公司 | 一种数字机顶盒分区升级的断电保护方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126672A1 (en) * | 2004-03-10 | 2008-05-29 | Sony Ericsson Mobile Communications Ab | Automatic Backup Store In Firmware Upgrades |
CN101520734A (zh) * | 2008-12-17 | 2009-09-02 | 康佳集团股份有限公司 | 一种升级闪存中数据的方法及其网络电视和交互式机顶盒 |
-
2012
- 2012-11-28 CN CN201210492326.1A patent/CN102945179B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126672A1 (en) * | 2004-03-10 | 2008-05-29 | Sony Ericsson Mobile Communications Ab | Automatic Backup Store In Firmware Upgrades |
CN101520734A (zh) * | 2008-12-17 | 2009-09-02 | 康佳集团股份有限公司 | 一种升级闪存中数据的方法及其网络电视和交互式机顶盒 |
Non-Patent Citations (2)
Title |
---|
刘加明 等: "《学习使用中文Windows95(高级)》", 31 July 1997, 人民邮电出版社 * |
韦东山: "《嵌入式Linux应用开发完全手册》", 31 August 2008 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014206024A1 (zh) * | 2013-06-27 | 2014-12-31 | 中兴通讯股份有限公司 | 一种嵌入式应用实现方法、装置和计算机存储介质 |
CN105468393A (zh) * | 2014-09-10 | 2016-04-06 | 启碁科技股份有限公司 | 模块版本升级方法及终端装置 |
CN105468393B (zh) * | 2014-09-10 | 2019-06-14 | 启碁科技股份有限公司 | 模块版本升级方法及终端装置 |
CN105094913A (zh) * | 2015-07-31 | 2015-11-25 | 广东欧珀移动通信有限公司 | ***、基带固件和***应用升级方法及装置 |
CN105094913B (zh) * | 2015-07-31 | 2018-06-15 | 广东欧珀移动通信有限公司 | ***、基带固件和***应用升级方法及装置 |
WO2017071646A1 (zh) * | 2015-10-28 | 2017-05-04 | 中兴通讯股份有限公司 | 设备分区信息传递方法及装置 |
CN105653333A (zh) * | 2015-12-31 | 2016-06-08 | 深圳市汇川控制技术有限公司 | 可编程逻辑控制器用户程序在线修改***及方法 |
CN106502750A (zh) * | 2016-10-28 | 2017-03-15 | 青岛海信电器股份有限公司 | Ota升级方法及蓝牙芯片 |
CN106502750B (zh) * | 2016-10-28 | 2019-09-10 | 青岛海信电器股份有限公司 | Ota升级方法及蓝牙芯片 |
CN107025121B (zh) * | 2017-03-31 | 2020-10-09 | Oppo广东移动通信有限公司 | 软件升级方法、装置和电子装置 |
CN107025121A (zh) * | 2017-03-31 | 2017-08-08 | 广东欧珀移动通信有限公司 | 软件升级方法、装置和电子装置 |
CN107562572A (zh) * | 2017-08-18 | 2018-01-09 | 上海斐讯数据通信技术有限公司 | 文件下载装置及***软件管理装置 |
CN107608699A (zh) * | 2017-10-17 | 2018-01-19 | 安徽皖通邮电股份有限公司 | 一种基于魔术分区的细粒度软件版本升级方法 |
CN107608699B (zh) * | 2017-10-17 | 2020-09-08 | 安徽皖通邮电股份有限公司 | 一种基于魔术分区的细粒度软件版本升级方法 |
CN107943504A (zh) * | 2017-12-07 | 2018-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式***中软件模块的动态升级方法 |
CN107943504B (zh) * | 2017-12-07 | 2021-03-26 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式***中软件模块的动态升级方法 |
CN108196870A (zh) * | 2017-12-29 | 2018-06-22 | 北京臻迪科技股份有限公司 | 升级方法及装置 |
CN113687855A (zh) * | 2021-07-22 | 2021-11-23 | 荣耀终端有限公司 | 电子设备及其***升级包的制作方法、***升级方法 |
CN113691845A (zh) * | 2021-08-19 | 2021-11-23 | 杭州国芯科技股份有限公司 | 一种数字机顶盒分区升级的断电保护方法 |
CN113691845B (zh) * | 2021-08-19 | 2023-08-18 | 杭州国芯科技股份有限公司 | 一种数字机顶盒分区升级的断电保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102945179B (zh) | 2016-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102945179A (zh) | 基于mtd分区的软件升级方法和装置 | |
CN101388110B (zh) | 数据快速读取方法及装置 | |
CN102024502B (zh) | 闪存器件测试方法、装置及板卡和网络设备 | |
CN101923516B (zh) | 以区块为基础的快闪存储装置及其操作方法 | |
CN103744694B (zh) | 基于Nand闪存的动态分区搜索装置及其方法 | |
CN106095620B (zh) | 一种嵌入式Linux存储分区的开发方法 | |
CN101551780B (zh) | 一种电视机及其数据存储方法、装置 | |
CN102012831B (zh) | 基于Linux平台的OTA升级方法 | |
CN102214113B (zh) | 一种操作***升级方法、装置及终端 | |
CN109426619A (zh) | 访问快闪存储器模块的方法及相关闪存控制器与电子装置 | |
CN101520734A (zh) | 一种升级闪存中数据的方法及其网络电视和交互式机顶盒 | |
CN103793238A (zh) | 机柜与其同时更新多个基本输入输出***的方法 | |
CN103365696A (zh) | Bios镜像文件获取方法及装置 | |
CN103365676B (zh) | 通信设备的软件升级方法及装置 | |
CN108829347A (zh) | 一种Nand设备的硬件控制器、控制方法及液晶显示器 | |
CN102141921A (zh) | 一种终端设备***升级方法及终端设备 | |
CN104063254A (zh) | 电能表在线升级方法 | |
CN102163155A (zh) | 存储设备的升级方法及升级控制装置 | |
CN102104750B (zh) | 一种网络电视自动升级的方法 | |
CN104021089A (zh) | 快闪存储器控制芯片与存储装置以及快闪存储器控制方法 | |
CN100549959C (zh) | 引导程序在线升级方法 | |
CN115220758B (zh) | 一种单片机固件在线升级的方法 | |
CN101000580A (zh) | Nand闪存信息提取方法和nand闪存自动识别方法 | |
CN101872306A (zh) | 一种实现软件更新和软件备份的嵌入式***及其实现方法 | |
CN106528441B (zh) | 仿真eeprom的数据处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |