CN102779060B - 一种应用程序多次压缩解压方法 - Google Patents

一种应用程序多次压缩解压方法 Download PDF

Info

Publication number
CN102779060B
CN102779060B CN201210239317.1A CN201210239317A CN102779060B CN 102779060 B CN102779060 B CN 102779060B CN 201210239317 A CN201210239317 A CN 201210239317A CN 102779060 B CN102779060 B CN 102779060B
Authority
CN
China
Prior art keywords
application program
compression
decompress
ion
compress
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.)
Active
Application number
CN201210239317.1A
Other languages
English (en)
Other versions
CN102779060A (zh
Inventor
吴军平
杨帅伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN201210239317.1A priority Critical patent/CN102779060B/zh
Publication of CN102779060A publication Critical patent/CN102779060A/zh
Application granted granted Critical
Publication of CN102779060B publication Critical patent/CN102779060B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种应用程序多次压缩解压方法,第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。本发明所述的应用程序多次压缩解压方法,提供了一套完整的制作时多次压缩,启动时多次解压及内存空间分配方案,能够在不改变硬件FLASH存储空间的条件下存储更大的应用程序,这样既节省了硬件成本又能满足原有软件的兼容。

Description

一种应用程序多次压缩解压方法
技术领域
本发明涉及机盘上FLASH存储空间内应用程序存储、运行技术领域,具体说是一种应用程序多次压缩解压方法。尤指一种应用程序制作时多次压缩,启动时多次解压的方法。
背景技术
由于机盘上FLASH存储空间的大小有限,用于存放应用程序的空间往往也限定了大小。为了使较大的应用程序能够存储在较小的FLASH空间内,一般情况下制作应用程序时都会对应用程序进行压缩,当压缩后的应用程序启动时,CPU不能直接执行压缩后的应用程序,所以还需要对压缩后的应用程序进行解压处理。
随着软件功能的不断增加,应用程序大小也在不断加大,会出现应用程序过大而没有足够的FLASH空间存放的问题。如果增大FLASH大小就会增加硬件成本,而且CPU支持的FLASH空间大小也不是无限大的,并且已经生产使用的机盘再增加FLASH硬件也是不现实的,应用中就出现了由于应用程序过大而导致没有足够空间存储的问题。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种应用程序多次压缩解压方法,在制作应用程序时多次压缩,实现了大的应用程序经过多次压缩体积变小,最终实现小FLASH空间存储大应用程序的目的;当压缩后的应用程序启动时,压缩后的应用程序自动完成多次解压、拷贝和内存清理,最终得到能够被CPU执行的应用程序,并且放在正确的内存空间,为应用程序的执行做好准备;节省了硬件成本。
为达到以上目的,本发明采取的技术方案是:
一种应用程序多次压缩解压方法,其特征在于,包括以下几个步骤:
第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;
多次压缩的具体步骤如下:
1)首先编译生成没有压缩的应用程序;
2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压;
3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头;
4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM能够解压的压缩算法对应用程序进行压缩;
5)对最终压缩好的应用程序添加用于检查和校验的文件头;
第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。
在上述技术方案的基础上,压缩后的应用程序启动的具体步骤如下:
1)板卡启动完成硬件初始化;
2)BOOTROM拷贝自己到内存中;
3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间;
4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离;
5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间;
6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间;
7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间;
8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。
在上述技术方案的基础上,每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。
本发明所述的应用程序多次压缩解压方法,提供了一套完整的制作时多次压缩,启动时多次解压及内存空间分配方案,在制作应用程序时多次压缩,实现了大的应用程序经过多次压缩体积变小,最终实现小FLASH空间存储大应用程序的目的;当压缩后的应用程序启动时,压缩后的应用程序自动完成多次解压、拷贝和内存清理,最终得到能够被CPU执行的应用程序,并且放在正确的内存空间,为应用程序的执行做好准备;该方法能够在不改变硬件FLASH存储空间的条件下存储更大的应用程序,这样既节省了硬件成本又能满足原有软件的兼容。
附图说明
本发明有如下附图:
图1 二次压缩应用程序制作过程图;
图2 一次压缩程序启动过程图;
图3 二次压缩程序启动流程图;
图4 二次解压内存使用示意图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
本发明所述的应用程序多次压缩解压方法,包括以下几个步骤:
第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;
多次压缩的具体步骤如下:
1)首先编译生成没有压缩的应用程序,即可以被CPU直接执行的应用程序,该应用程序为首个版本,或对当前版本的升级;
2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压;
3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头;压缩的总次数大于等于2;
4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM(自动启动技术,该技术用于使存储于FLASH内的程序可自动执行一次)能够解压的压缩算法对应用程序进行压缩;最后一次压缩时选用BOOTRO能够解压的压缩算法是为了保证第一次解压BOOTROM能够自己完成;
5)对最终压缩好的应用程序添加用于检查和校验的文件头;该文件头用于FLASH烧写时文件的检查和校验;
第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。
需要注意的是,应用程序不可能被无限的压缩变小。压缩和解压必须按照一定的顺序进行,这个顺序就是:先压缩的后解压,压缩和解压的顺序必须一一对应。另外:第一步执行完后,该携带有用于检查和校验的文件头的最终压缩好的应用程序需要烧写到FLASH内,然后才能利用BOOTROM技术执行第二步所说的“压缩后的应用程序启动”,由于“烧写到FLASH内”不是本发明的研究重点,且可采用现有公知技术实施,故不在详述。
在上述技术方案的基础上,压缩后的应用程序启动的具体步骤如下:
1)板卡启动完成硬件初始化;
2)BOOTROM拷贝自己到内存中;
3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间;
4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离;
5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间;
6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间;
7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间;
8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。
在上述技术方案的基础上,每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。
为了减小应用程序的体积,本发明采用了应用程序多次压缩的方法减小体积,程序烧写进FLASH之后,启动时对压缩程序进行多次自动解压和拷贝,最终得到可以被CPU执行的应用程序,并把这个应用程序放在能够被CPU执行的内存空间。
(1)、压缩制作应用程序。应用程序生成后,采用不同的压缩算法对应用程序进行多次压缩,每次压缩完成后,需要给压缩后的应用程序添加自解压头,自解压头能够当压缩后的应用程序启动时完成本次压缩的自动解压。最后一次压缩应该采用BOOTROM能够解压的压缩算法,以便BOOTROM能够完成第一次解压。
程序的压缩指定了压缩算法和顺序后,在程序编译时可以采用压缩工具自动生成压缩文件和添加自解压头,最终生成可以烧写FLASH的应用程序。
(2)、程序启动时解压应用程序。启动时,BOOTROM完成硬件的初始化之后,BOOTROM首先拷贝自己到内存,然后开始解压应用程序,BOOTROM完成第一次应用程序解压,并把解压后的文件放在正确的内存空间(这个解压后的文件包括自解压头和压缩程序两部分),然后分别拷贝自解压头和压缩文件到不同的内存空间,实现自解压头和压缩文件的分离,然后清理拷贝前压缩程序占用的内存空间。自解压头再次对压缩文件进行解压,并把解压后的应用程序放在能够被CPU执行的内存空间。按照上面的步骤,根据应用程序压缩的次数对压缩程序进行多次解压,解压次数和压缩次数必须一样,并且按照先压缩后解压的顺序进行,最终得到能够被CPU执行的应用程序,并且放在能够被CPU执行的内存空间。
程序启动时,自动拷贝压缩文件和自解压头到正确的内存空间并且完成解压,经过多次解压和内存清理后最终得到可以被CPU执行的应用程序。
(3)、清理内存空间。程序在解压过程中,自解压头和压缩程序都会占用内存空间,当一次解压完成后,需要清理使用过的内存空间,以供下次解压使用,解压完成后,清理完内存之后才能开始执行应用程序。
下面以 vxworks操作系统下二次压缩解压为例,对应用程序的压缩制作和解压启动过程做详细的介绍。两次压缩分别采用vxworks的deflate压缩算法和7zip压缩算法。
例如部分机盘FLASH里用于存放应用程序大小的空间被限制在5M以内,随着应用程序的不断增大,经过deflate压缩之后的应用程序大小超过了5M,大小超过了FLASH空间的限定,不能直接烧写进FLASH,就需要对应用程序进行第二次压缩。压缩文件的制作过程如图1所示,在编译生成xvworks.bin文件之后,首先使用7zip压缩算法对文件进行第一次压缩,压缩完成后,给压缩后的文件添加自解压头,这个自解压头具有解压7zip压缩文件的功能。添加了自解压头的7zip压缩文件由于大小还不能满足FLASH大小的要求,需要对其进行第二次压缩。第二次压缩采用vxworks的deflate压缩算法(如果第二次压缩后文件大小还不能满足FLASH大小的要求,就需要进行三次压缩,但最后一次压缩必须是vxworks BOOTROM能够解压的deflate压缩算法,需要注意的是:文件不可能被无限的压缩变小,压缩到一定程度后再次压缩就没有多大效果),压缩完成后需要给压缩文件添加256字节文件头,这个用于文件的检查和校验。经过二次压缩,添加了文件头的压缩程序大小有3M多,这个压缩程序就可以用来烧写FLASH。
程序启动时,二次压缩程序的启动要比一次压缩的启动过程复杂。首先介绍一次压缩程序的启动过程。如图2所示,在vxworks操作系统下,BOOTROM首先完成硬件的初始化,硬件初始化完成之后,BOOTROM就会拷贝自己到地址为0x100000的内存空间,接着程序会跳转到内存执行,BOOTROM解压压缩程序到地址为0x200000的内存空间(BOOTROM能够解压deflate压缩的程序),解压完成后就跳转到应用程序的起始地址开始执行应用程序。由于经过二次压缩的应用程序在启动时需要进行两次解压,所以二次压缩程序的启动比一次压缩的要复杂些,如图3所示,二次压缩程序的启动在完成硬件的初始化之后,第一次经过BOOTROM的解压,把解压后的文件放在内存地址为0x200000的地址空间,第一次解压后的应用程序仍然是个压缩文件,这个压缩文件不能被CPU执行,所以需要进行第二次解压。经过BOOTROM解压后的文件是7zip压缩文件,这个文件由自解压头和压缩文件两部分组成,首先把7zip的自解压头拷贝到地址为0x100000的内存空间,把7zip的压缩文件拷贝到地址为0x7000000的内存空间,把自解压头和压缩文件分离开之后,用自解压头对压缩文件进行第二次解压,把解压出来的程序放在地址为0x200000的内存空间,这个解压后的程序就是CPU能够执行的应用程序。清理使用过的内存之后,CPU就从内存地址为0x200000开始执行应用程序,完成软件的启动,如果需要进行更多次解压,就按照上面的步骤重复程序拷贝和解压即可。
在这个启动过程中,内存的使用和程序的拷贝如图4所示,首先BOOTROM拷贝自己到地址为0x100000的内存空间,当BOOTROM完成对应用程序的第一次解压之后,就会释放自己占用的内存空间,之后7zip压缩文件的自解压头被拷贝到这个内存空间。BOOTROM解压出来的7zip压缩文件和自解压头放在内存地址为0x200000的地址空间,当自解压头和压缩文件完成拷贝时,这个地址空间就要被释放,以便7zip的压缩文件能够再次解压到这个地址空间(如果需要更多次解压,只要这样重复拷贝程序和清理内存空间即可),当最后一次解压完成后,清理解压前用过的内存空间,之后CPU开始执行应用程序完成启动。
上述方法实现了用较小的FLASH空间存放较大应用程序的目的,不但节省了硬件成本,也有利于程序的兼容。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (2)

1.一种应用程序多次压缩解压方法,其特征在于,包括以下几个步骤:
第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;
多次压缩的具体步骤如下:
1)首先编译生成没有压缩的应用程序;
2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压;
3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头;
4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM能够解压的压缩算法对应用程序进行压缩;
5)对最终压缩好的应用程序添加用于检查和校验的文件头;
第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序;
压缩后的应用程序启动的具体步骤如下:
1)板卡启动完成硬件初始化;
2)BOOTROM拷贝自己到内存中;
3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间;
4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离;
5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间;
6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间;
7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间;
8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。
2.如权利要求1所述的应用程序多次压缩解压方法,其特征在于:每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。
CN201210239317.1A 2012-07-11 2012-07-11 一种应用程序多次压缩解压方法 Active CN102779060B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210239317.1A CN102779060B (zh) 2012-07-11 2012-07-11 一种应用程序多次压缩解压方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210239317.1A CN102779060B (zh) 2012-07-11 2012-07-11 一种应用程序多次压缩解压方法

Publications (2)

Publication Number Publication Date
CN102779060A CN102779060A (zh) 2012-11-14
CN102779060B true CN102779060B (zh) 2015-07-01

Family

ID=47123980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210239317.1A Active CN102779060B (zh) 2012-07-11 2012-07-11 一种应用程序多次压缩解压方法

Country Status (1)

Country Link
CN (1) CN102779060B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104216890A (zh) * 2013-05-30 2014-12-17 北京赛科世纪数码科技有限公司 一种elf文件的压缩方法及系统
CN105095278B (zh) * 2014-05-13 2018-09-07 华为技术有限公司 一种文件压缩方法及装置
CN106648809A (zh) * 2017-01-10 2017-05-10 上海航天控制技术研究所 一种卫星星载软件的启动方法
CN115398406A (zh) * 2020-06-02 2022-11-25 深圳市欢太科技有限公司 数据压缩方法、装置、电子设备及存储介质
CN114025346B (zh) * 2021-10-12 2024-03-29 杭州趣链科技有限公司 一种移动自设网络间数据安全有效的数据传输方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1500350A (zh) * 2001-02-21 2004-05-26 ������Ƶ��Ʒ��˾ 具有个人视频记录特征的交互式节目导视器的系统和方法
CN101140521A (zh) * 2007-01-09 2008-03-12 中兴通讯股份有限公司 Boot软件引导app软件的方法和装置
CN101140522A (zh) * 2007-03-13 2008-03-12 中兴通讯股份有限公司 一种嵌入式系统版本的自解压方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1500350A (zh) * 2001-02-21 2004-05-26 ������Ƶ��Ʒ��˾ 具有个人视频记录特征的交互式节目导视器的系统和方法
CN101140521A (zh) * 2007-01-09 2008-03-12 中兴通讯股份有限公司 Boot软件引导app软件的方法和装置
CN101140522A (zh) * 2007-03-13 2008-03-12 中兴通讯股份有限公司 一种嵌入式系统版本的自解压方法

Also Published As

Publication number Publication date
CN102779060A (zh) 2012-11-14

Similar Documents

Publication Publication Date Title
CN102779060B (zh) 一种应用程序多次压缩解压方法
CN102479098B (zh) 使用快照图像的引导设备和方法
CN101799763B (zh) 内核在线补丁的方法、装置和系统
CN105786563B (zh) 实现软件在线更新的装置、系统和方法
CN102053831B (zh) 一种Linux操作系统的定制方法及系统
WO2015070521A1 (zh) 将ubi格式的系统文件制作成工厂烧录映像文件方法
CN105550123B (zh) 电子装置及其存储空间管理方法
CN105512036A (zh) 根据预置规则自动生成测试用例的测试模板及测试方法
CN102981959B (zh) 固态存储装置及其垃圾搜集动作的控制方法
CN110737594B (zh) 自动生成测试用例的数据库标准符合性测试方法及装置
CN108271150B (zh) 支持同时对多台手机进行刷机或数据清除的方法及系统
CN110516789A (zh) 卷积网络加速器中指令集的处理方法、装置及相关设备
CN102214114B (zh) 一种双cpu系统客户机程序的升级方法及系统
CN109413499A (zh) 安卓电视固件的配置方法、系统及设备
CN103514063A (zh) 一种flash数据处理方法以及装置
CN107193619B (zh) 一种编译版本自动更新的方法与装置
CN103902303A (zh) 基于配置表的程序固化方法
CN105912265A (zh) 一种Expander适配配置文件的方法及装置
CN111142877B (zh) Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质
CN105072441A (zh) 一种机顶盒软件检测方法
CN108664255A (zh) 一种软件升级方法及装置
CN116974572A (zh) 基于循环剥离的访存地址计算优化方法及装置
CN110231951A (zh) 一种多单片机程序升级系统及其方法
CN103955376A (zh) 一种dsp自启动二次按需加载方法
JP5906609B2 (ja) デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム

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