CN1269034C - 一种嵌入式系统中可执行文件的压缩及其加载方法 - Google Patents

一种嵌入式系统中可执行文件的压缩及其加载方法 Download PDF

Info

Publication number
CN1269034C
CN1269034C CN 200310117664 CN200310117664A CN1269034C CN 1269034 C CN1269034 C CN 1269034C CN 200310117664 CN200310117664 CN 200310117664 CN 200310117664 A CN200310117664 A CN 200310117664A CN 1269034 C CN1269034 C CN 1269034C
Authority
CN
China
Prior art keywords
executable file
file
compression
data
executable
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.)
Expired - Lifetime
Application number
CN 200310117664
Other languages
English (en)
Other versions
CN1556472A (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.)
ZTE Corp
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN 200310117664 priority Critical patent/CN1269034C/zh
Publication of CN1556472A publication Critical patent/CN1556472A/zh
Application granted granted Critical
Publication of CN1269034C publication Critical patent/CN1269034C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明的一种嵌入式系统中可执行文件的压缩及其加载方法,其包括以下步骤:对原有结构的可执行文件使用可执行文件处理方法进行处理,修改该可执行文件的文件头中的文件标识符,保持其它数据不变,用以表示该文件为采用压缩的可执行文件,产生压缩后的可执行文件;识别所述压缩后的可执行文件的文件头部,如果为所述压缩后的可执行文件,则该加载方法完成数据解压缩的分支,对各个数据段与代码段进行解压缩;将解压缩后的各段数据按照系统正常加载可执行文件的规则放置在正确的内存位置中。本发明方法对于嵌入式系统适用范围广、可靠性高、成本低。

Description

一种嵌入式系统中可执行文件的压缩及其加载方法
技术领域
本发明方法涉及一种可执行文件的压缩以及加载方法,特别是涉及一种适用于嵌入式操作系统中的可执行文件的压缩以及压缩后的可执行文件的加载方法。
背景技术
在计算机系统中,为了减少文件所占用的存储空间,通常会采用压缩的方式存储文件,对文件的压缩可以分为透明压缩与不透明压缩两种。
所谓不透明压缩是最常采用的压缩方式,该方式使用特定的压缩工具(程序),采用特定的压缩算法,对源文件进行压缩处理后,获得占用空间较小的被压缩文件;当需要得到源文件的时候,则采用对应的工具与算法对被压缩文件进行解压缩处理而得到源文件。由于操作系统以及系统中的其它程序不能直接使用被压缩后的文件,因此这种压缩方法对于操作系统或者使用者而言,是不透明的。
所谓透明压缩,是指通过采取一定的技术手段,既达到了对数据压缩以减少存储空间占用的效果,同时操作系统以及使用者又能够不受影响的存取这些数据。为了实现透明压缩,根据压缩对象的不同,通常又会采用如下三种方式:
一是数据文件的透明压缩。数据文件一般而言是指系统中除了可执行文件之外的文件。总体而言,数据文件一般会被系统中的相关程序进行打开、读、写、关闭等操作。相应的,对于数据文件的透明压缩,通常采用修改系统动态执行库中这些相关操作,在操作过程中增加压缩/解压缩的处理,这样就可以完成对数据文件的透明压缩/解压缩处理。
二是可执行文件的透明压缩。由于可执行文件是系统可以加载运行的,而操作系统的加载器需要可执行文件的文件头以及执行段的加载信息等内容才能完成加载,因此不能采用与数据文件相同的透明压缩方式。现有技术的可执行文件的结构如图1所示的,其依次包括一文件头部、一程序段描述表、各程序段1~N;目前最常采用的可执行文件透明压缩方式,是在压缩处理的时候,在可执行文件的前部插入自解压代码,使压缩后的可执行文件成为一个自解压的文件,在可执行文件加载的时候,先执行文件前部的自解压代码,完成目标可执行文件的解压缩,当目标可执行文件被完整的解压缩后,再由系统的可执行文件加载器进行加载运行,从而达到透明压缩的目的。
三是文件系统的压缩。这种方法通过对文件系统本身的压缩来实现压缩数据的目的,通常采用在操作系统的文件系统与存储设备驱动之间增加一个压缩驱动的层次。这样,在文件系统进行数据存取操作的时候,该压缩驱动程序同时完成了对数据的压缩/解压缩操作,从而实现了对操作性以及使用者的透明性。
由于嵌入式系统的规模较小,存储容量有限,嵌入式系统一般都会对数据进行压缩,以减少嵌入式系统对存储空间的总需求,从而降低整个系统的成本。对于嵌入式系统来说,由于系统规模比较小,操作界面简单甚至没有操作界面,因此,系统中需要的压缩方式应该是不需要交互操作的透明压缩方式。
现有技术的可执行文件的加载方法如图4所示的,在程序开始后,首先判断该可执行文件的类型;然后,建立相应的内存结构数据,拷贝进程资源;产生新的应用程序进程;最后,该应用程序被调度执行后,结束该流程。但该加载过程无法用于对压缩的可执行文件进行加载。
目前嵌入式系统中采用的数据压缩方式,主要有使用支持数据压缩的文件系统与直接压缩可执行文件两种方式。采用这两种方式实现数据压缩,存在以下的主要问题:
一.如果在嵌入式系统中使用前述的可执行文件的透明方式,则由于该可执行文件在运行之前需要将原来的可执行文件临时解压缩到存储介质中。这种方式对于存储介质容量有限的嵌入式系统而言,不但没有减少系统运行需要的总的最小存储介质容量,反而增加了存放压缩后文件存放所需要的存储空间。所以实际上这种方式是很不经济的。
二.压缩文件系统由于需要在整个文件系统操作中增加压缩驱动层的处理,因此不可避免将会对系统的性能产生影响。在采用压缩文件系统的嵌入式系统中,所有的文件数据操作都会经过压缩驱动层的处理,由此导致系统产生较大的额外开销,这在系统处理能力有限的嵌入式系统中,影响尤其明显。
三.已有的压缩文件系统存在一定的介质相关性,而实际的嵌入式系统的构建方式千差万别,不一定可以在所有的嵌入式系统存储配置情况下,都找到满足要求的压缩文件系统。
四.压缩文件系统的压缩率不高。为了达到更高的数据压缩率,必然需要对更大容量的相关数据进行压缩,而压缩更多的相关数据又会导致数据操作的延时增大。为了平衡性能与效率,一般压缩文件系统的压缩效率都不是很高。
五.对于大多数的嵌入式系统而言,为了完成特定的专用功能,系统中只需要完成该功能的应用程序能够运行即可,因此在系统中不存在很多其他的数据文件。在这样的系统中,实际上只有可执行文件具有压缩的需求。
由此,现有技术存在较大缺陷,而有待于加以改进。
发明内容
本发明方法的目的是针对上述现有技术的缺陷,提出一种嵌入式系统中可执行文件的压缩及其加载方法,适合于嵌入式系统对其使用的可执行文件进行压缩以及实现对压缩后的可执行文件的加载,通过对压缩后的可执行文件的文件头部的标识类型,减少嵌入式系统所需要的存储介质的容量,达到降低成本的目的,同时,通过改进后的可执行文件的文件压缩以及加载方式,达到提高采用压缩文件的嵌入式系统的运行效率,降低系统额外资源开销;通过本发明方法中的压缩可执行文件的加载方式,可以使各种存储介质配置方式的嵌入式单板均能对可执行文件进行压缩,使用范围更宽。
本发明的技术方案如下:
一种嵌入式系统中可执行文件的压缩及其加载方法,其包括以下步骤:
a)对原有结构的可执行文件使用可执行文件处理方法进行处理,修改该可执行文件的文件头中的文件标识符,保持其它数据不变,用以表示该文件为采用压缩的可执行文件,产生压缩后的可执行文件;
b)使用以下可执行文件加载方法加载运行所述压缩后的可执行文件:
b1)进行识别所述压缩后的可执行文件的文件头部;
b2)如果识别出当前加载的可执行文件为所述压缩后的可执行文件,则进入加载压缩后可执行文件的流程;
b3)记录完成数据解压缩的各分支信息,并对经过压缩后的各个数据段与代码段进行解压缩;
b4)根据各个数据段与代码段的相关信息,将解压缩后的各段数据按照系统正常加载可执行文件的规则放置在正确的内存位置中。
所述的压缩及其加载方法,其中,所述步骤a)还包括以下步骤:
a1)对于可执行文件的数据段与代码段,保持其重定位的信息在程序段描述表项中,同时在程序段描述表项中增加该段压缩数据的相关信息;
a2)各程序段数据各自按照压缩算法进行压缩;
a3)将压缩后的程序段组装成为一个完整的文件。
所述的压缩及其加载方法,其中,所述可执行文件的加载方法可加载普通可执行文件。
本发明所提供的一种嵌入式系统中可执行文件的压缩及其加载方法,采用对可执行文件进行压缩,并将压缩方法等信息记录入所述程序段描述表中,然后通过对文件头部加以标识记录该可执行文件的是否经过压缩,所述嵌入式系统根据该文件头部的标识相应加载该经过压缩后的可执行文件,并对对应部分进行解压执行;本发明方法因此具有如下有益效果:
一、采用本发明方法的可执行文件压缩及上载方法后,由于该嵌入式系统所需要的存储介质空间减少,系统硬件所预安装的存储介质量无需太高,可以降低嵌入式系统的成本;
二、用本发明方法压缩与加载可执行文件,由于不需要把压缩后的可执行文件解压缩成完整的可执行文件后再加载,能够真正适应嵌入式系统的压缩需求;
三、本发明方法一般只压缩嵌入式系统中体积最大的可执行文件,而不是对整个文件系统进行压缩,这样本发明方法与现有的压缩文件系统的方式相比,除了文件加载运行时以外,不会产生额外的系统开销,不会影响系统的运行性能;
四、就压缩效率而言,本发明方法与现有的压缩文件系统相比,由于无需考虑压缩率的提高对系统性能的影响,可以做到更高的压缩效率,对于嵌入式系统中经常采用的静态编译的可执行文件尤为明显;
五、采用本发明方法对嵌入式系统中的可执行文件进行数据压缩,它的实现与具体的平台无关,具有适应范围广的特点。
总之,本发明的所述方法具有适用范围广、可靠性高、成本低的特点。
附图说明
附图中,
图1是现有技术中操作系统的一般可执行文件的结构示意图;
图2是采用本发明方法的压缩方法后的可执行文件的结构示意图;
图3是本发明方法的压缩可执行文件的流程示意图;
图4是现有技术的方法中通常采用的可执行文件加载的流程示意图;
图5是采用本发明方法的加载压缩可执行文件的流程示意图。
具体实施方式
下面结合附图对技术方案的实施作进一步的详细描述:
如图1所示的为现有技术的普通可执行文件的结构示意图,其依次包括一文件头部,一程序段描述表,数个程序段1~N,组装形成一个可执行文件。
在嵌入式系统中,由于对储存空间的使用要求尽量节约才可以降低系统硬件的成本,因此,本发明方法采用一特定的压缩方法,将可执行文件进行压缩,压缩后的文件结构如图2所示的,依次包括了新文件头部,该新文件头部包含了压缩执行文件信息;新程序段描述表,其中包含了压缩方法等新的段属性;根据记录的压缩方法,对应各压缩后的压缩程序段1~N,然后组装成压缩后的可执行文件。
如图3所示的,本发明方法的所述的适合嵌入式系统的可执行文件的压缩方法,其具体步骤如下:
a)使用可执行文件处理方法来处理原有结构的可执行文件(如图1所示的),产生压缩后的可执行文件(如图2所示的)。
原有结构的可执行文件,需要经过处理,得到采用本发明方法压缩后的可执行文件,原来的文件头部由于携带有该可执行文件加载运行所需要的相关信息,所以文件头部中除了文件类型标识外的其它数据保持不变;其主要步骤包括:
1)修改该可执行文件的文件头部的文件标识,表示该文件为采用本发明方法压缩后的可执行文件;
2)对于数据段与代码段,保持其重定位的信息在所述程序段描述表项中,同时在该程序段描述表项中增加该段压缩数据的相关信息,即如各程序段的压缩方法等;
3)各程序段数据各自按照相应的压缩算法进行压缩,形成压缩后的压缩程序段;
4)将以上各部分组装成为一个完整的文件,即压缩后的可执行文件。
b)使用新的可执行文件的加载方法加载运行所述步骤a)中得到的压缩后的可执行文件,该可执行文件的加载方法具有加载普通可执行文件运行的能力,以保证系统中其他正常格式的可执行文件能够加载运行,该新的可执行文件的加载方法的主要步骤如下:
b1)首先该加载方法识别所述步骤a)中产生的压缩后的可执行文件的文件头;
b2)如果识别出当前待加载的可执行文件为本发明方法中的压缩后的可执行文件,则进入加载压缩后的可执行文件的流程;
b3)该加载方法具有完成数据解压缩的分支,用于对经过压缩后的各个数据段与代码段进行解压缩;
b4)根据各个数据段与代码段的相关信息,将解压缩后的各段数据按照系统正常加载可执行文件的规则放置在正确的内存位置中;
此后进入与正常加载方法相同的产生进程的过程。
如图3所示描述了将一个如图1所示的普通可执行文件,处理成为一个如图2所示的压缩后的可执行文件的过程。
主要的处理过程有文件头部的处理、程序段属性表的处理与调整、以及程序段数据的压缩三个部分。
对于文件头,主要是增加识别压缩可执行文件的特定标识,该标识在该可执行文件被加载时,由加载器进行读取和识别,以决定该可执行文件的具体加载方式。所述加载器是操作系统的一个功能部分,负责将静态的可执行程序文件从不可在其上直接执行的存储介质如磁盘、某些FLASH等中装载到操作系统的内存空间,并赋予其执行能力使其最终可由任务调度机制调度执行。
对于程序段属性表的修改,主要是增加各个程序段压缩方法的指示信息,该指示信息同样由可执行文件加载器在加载时读取并识别,以决定各个压缩程序段的解压缩方式。
对于程序段的压缩,只需要把由各个程序段属性表项所确定的程序段在文件中的起始偏移与结束偏移之间的数据段作为压缩的输入,采用一定的压缩方法进行数据压缩,即得到该程序段对应的压缩程序段。
以上处理步骤结束后,将所述文件头、程序属性段表以及各个压缩后的压缩程序段连接在一起,就得到需要的压缩后的可执行文件。
如图3所示的,其处理的具体步骤是,程序开始后,首先设置待压缩的可执行文件的文件头部,将其标识为压缩后的可执行文件类型;然后,设置所述程序段描述表,增加程序段压缩方法信息;修正由于添加数据而导致的文件头部偏移;扫描程序段描述表,以各程序段的偏移起止为区间,将该区间的数据作为输入,依照对应的压缩算法进行压缩每个程序段;修正由于数据改变而导致的程序段描述表中的各程序段的偏移值;连接所述文件头部、程序段描述表、各压缩程序段得到完整的压缩后的可执行文件。
如图5所示描述了本发明方法的一可以加载所述压缩后的可执行文件的工作流程。该加载方法同时具有加载普通可执行文件与压缩后的可执行文件的能力:
对于压缩后的可执行文件,根据其文件头部中指示的程序段描述表的位置,依次读取并分析各个程序段描述表项,得到各个程序段的文件内偏移、加载地址偏移、压缩方法等。
首先,该加载方法根据所述可执行文件的文件头部的文件标识,判断需要加载的可执行文件的类型,对于普通可执行文件,则由操作系统按照如图4所示的正常的加载流程进行加载。
然后,根据各个程序段的所有属性数据,计算程序加载所需要的内存空间。
接着再向操作系统申请加载该程序所需要的连续内存空间。
然后逐个解压缩各程序段数据,并将解压缩后的数据依正常可执行文件的加载位置放置在所申请的内存空间中。由于编译时刻与实际运行时刻的内存布局可能有不同,需要对解压缩后的程序数据的基地址等进行必要的修正,以保证代码可以正确执行。
然后进入操作系统加载应用程序的正常步骤,进行操作系统相关的创建进程所需的准备工作,包括:申请进程运行所需要的其它资源、执行环境初始化等。
最后创建一个操作系统中可执行的进程(或者线程),并加入该操作系统的调度队列等待运行。
该程序加载流程结束。
由此,本发明方法实现了对可执行文件在嵌入式系统中的透明压缩,并且适应范围宽,同时可适用于未压缩的普通可执行文件,并且对可执行文件压缩后占用所述嵌入式系统的空间更小,成本更低。
所述可加载普通可执行文件意指本发明方法在加载已压缩可执行文件的同时可以加载普通可执行文件,此处本发明程序可从文件头部了解到被加载的可执行文件是否被压缩,如未被压缩,直接加载即可,如已被压缩,加载过程须根据文件头部记录进行对应数据块的解压,因为可能不同数据块采用了不同的压缩方法,然后加载到未被解压的数据应加载的位置上即可。也即本发明方法主要包括压缩和加载两个过程。
本发明的技术方案对于本领域普通技术人员来说,可能根据本发明的技术内容进行其他等同改变或替换,而所有这些等同改变或替换都应属于本发明所附权利要求的保护范围。

Claims (2)

1、一种嵌入式系统中可执行文件的压缩及其加载方法,其包括以下步骤:
a)对原有结构的可执行文件使用可执行文件处理方法进行处理,修改该可执行文件的文件头中的文件标识符,保持其它数据不变,用以表示该文件为采用压缩的可执行文件,产生压缩后的可执行文件;
该步骤进一步包括如下步骤:
a1)对于可执行文件的数据段与代码段,保持其重定位的信息在程序段描述表项中,同时在程序段描述表项中增加该段压缩数据的相关信息;
a2)各程序段数据各自按照压缩算法进行压缩;
a3)将压缩后的程序段组装成为一个完整的文件;
b)使用以下可执行文件加载方法加载运行所述压缩后的可执行文件:
b1)进行识别所述压缩后的可执行文件的文件头部;
b2)如果识别出当前加载的可执行文件为所述压缩后的可执行文件,则进入加载压缩后可执行文件的流程;
b3)记录完成数据解压缩的各分支信息,并对经过压缩后的各个数据段与代码段进行解压缩;
b4)根据各个数据段与代码段的相关信息,将解压缩后的各段数据按照系统正常加载可执行文件的规则放置在正确的内存位置中。
2、根据权利要求1所述的压缩及其加载方法,其特征在于,所述可执行文件的加载方法可加载普通可执行文件。
CN 200310117664 2003-12-31 2003-12-31 一种嵌入式系统中可执行文件的压缩及其加载方法 Expired - Lifetime CN1269034C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200310117664 CN1269034C (zh) 2003-12-31 2003-12-31 一种嵌入式系统中可执行文件的压缩及其加载方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200310117664 CN1269034C (zh) 2003-12-31 2003-12-31 一种嵌入式系统中可执行文件的压缩及其加载方法

Publications (2)

Publication Number Publication Date
CN1556472A CN1556472A (zh) 2004-12-22
CN1269034C true CN1269034C (zh) 2006-08-09

Family

ID=34337910

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200310117664 Expired - Lifetime CN1269034C (zh) 2003-12-31 2003-12-31 一种嵌入式系统中可执行文件的压缩及其加载方法

Country Status (1)

Country Link
CN (1) CN1269034C (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1916853B (zh) * 2006-09-18 2010-05-19 华为技术有限公司 用于mips系统的代码段保护方法和装置
CN101056252B (zh) * 2007-06-07 2010-04-21 中兴通讯股份有限公司 压缩文件的传播方法
CN102375760B (zh) * 2010-08-24 2016-01-20 中兴通讯股份有限公司 嵌入式系统及其中的文件系统的倒换方法
CN104216890A (zh) * 2013-05-30 2014-12-17 北京赛科世纪数码科技有限公司 一种elf文件的压缩方法及系统
CN106909398B (zh) * 2017-03-10 2020-10-16 深圳创维-Rgb电子有限公司 一种可执行文件的压缩方法及装置
CN109558149A (zh) * 2018-11-30 2019-04-02 厦门亿联网络技术股份有限公司 一种基于ubl的uboot解压缩方法及系统
CN112270010B (zh) * 2020-11-17 2024-04-12 上海好连网络科技有限公司 可执行文件远程安全加载的方法

Also Published As

Publication number Publication date
CN1556472A (zh) 2004-12-22

Similar Documents

Publication Publication Date Title
CN1096636C (zh) 执行减少运行存贮空间要求执行线程的计算机系统和方法
CN1799032A (zh) 用于变化内存压缩机器的方法和装置
CN1475909A (zh) 一种嵌入式系统软件补丁的实现和控制方法
US20160117257A1 (en) Hardware-based array compression
CN101042703A (zh) 使用数据库管理系统管理文件系统的数据的方法
CN1504881A (zh) 爪哇执行设备和爪哇执行方法
CN1269034C (zh) 一种嵌入式系统中可执行文件的压缩及其加载方法
CN1829977A (zh) 利用一个栈跟踪高速缓存器改善垃圾收集的性能的方法和装置
CN1609850A (zh) 调整数据库大小的系统和方法
CN111240765B (zh) 一种linux压缩应用程序的加载方法
CN1896960A (zh) 一种快照系统及方法
CN1825306A (zh) 基于关系数据库的xml数据存储与访问方法
CN1851671A (zh) 一种节省全局变量内存空间的方法
CN1687899A (zh) 将应用程序动态下载到用户识别模块的方法、系统及模块
CN1329309A (zh) 操作系统的多语言用户接口
CN1200354C (zh) 自动压缩/解压缩文件系统
CN1254735C (zh) 用于减少碎片的方法
CN1110754C (zh) 计算机硬盘数据复制方法及系统
CN1737759A (zh) 一种在Nand Flash存储器中直接建立只读文件系统的方法
CN1967505A (zh) 信息处理装置、图像摄取装置、信息处理方法及计算机程序
CN101051501A (zh) 媒体录制方法和装置
CN101059758A (zh) 屏幕转换程序生成方法及设备
CN1195811A (zh) 对应于最优化图象产生调试源文件的语言处理系统和方法
CN1661561A (zh) 具省电特性的操作系统共享应用程序的架构及其方法
CN1928819A (zh) 程序启动方法及使用上述方法的嵌入式系统

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
CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20060809