專利名稱:一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法
技術(shù)領(lǐng)域:
本發(fā)明方法涉及一種可執(zhí)行文件的壓縮以及加載方法,特別是涉及一種適用于嵌入式操作系統(tǒng)中的可執(zhí)行文件的壓縮以及壓縮后的可執(zhí)行文件的加載方法。
背景技術(shù):
在計(jì)算機(jī)系統(tǒng)中,為了減少文件所占用的存儲(chǔ)空間,通常會(huì)采用壓縮的方式存儲(chǔ)文件,對(duì)文件的壓縮可以分為透明壓縮與不透明壓縮兩種。
所謂不透明壓縮是最常采用的壓縮方式,該方式使用特定的壓縮工具(程序),采用特定的壓縮算法,對(duì)源文件進(jìn)行壓縮處理后,獲得占用空間較小的被壓縮文件;當(dāng)需要得到源文件的時(shí)候,則采用對(duì)應(yīng)的工具與算法對(duì)被壓縮文件進(jìn)行解壓縮處理而得到源文件。由于操作系統(tǒng)以及系統(tǒng)中的其它程序不能直接使用被壓縮后的文件,因此這種壓縮方法對(duì)于操作系統(tǒng)或者使用者而言,是不透明的。
所謂透明壓縮,是指通過采取一定的技術(shù)手段,既達(dá)到了對(duì)數(shù)據(jù)壓縮以減少存儲(chǔ)空間占用的效果,同時(shí)操作系統(tǒng)以及使用者又能夠不受影響的存取這些數(shù)據(jù)。為了實(shí)現(xiàn)透明壓縮,根據(jù)壓縮對(duì)象的不同,通常又會(huì)采用如下三種方式一是數(shù)據(jù)文件的透明壓縮。數(shù)據(jù)文件一般而言是指系統(tǒng)中除了可執(zhí)行文件之外的文件。總體而言,數(shù)據(jù)文件一般會(huì)被系統(tǒng)中的相關(guān)程序進(jìn)行打開、讀、寫、關(guān)閉等操作。相應(yīng)的,對(duì)于數(shù)據(jù)文件的透明壓縮,通常采用修改系統(tǒng)動(dòng)態(tài)執(zhí)行庫中這些相關(guān)操作,在操作過程中增加壓縮/解壓縮的處理,這樣就可以完成對(duì)數(shù)據(jù)文件的透明壓縮/解壓縮處理。
二是可執(zhí)行文件的透明壓縮。由于可執(zhí)行文件是系統(tǒng)可以加載運(yùn)行的,而操作系統(tǒng)的加載器需要可執(zhí)行文件的文件頭以及執(zhí)行段的加載信息等內(nèi)容才能完成加載,因此不能采用與數(shù)據(jù)文件相同的透明壓縮方式?,F(xiàn)有技術(shù)的可執(zhí)行文件的結(jié)構(gòu)如圖1所示的,其依次包括一文件頭部、一程序段描述表、各程序段1~N;目前最常采用的可執(zhí)行文件透明壓縮方式,是在壓縮處理的時(shí)候,在可執(zhí)行文件的前部插入自解壓代碼,使壓縮后的可執(zhí)行文件成為一個(gè)自解壓的文件,在可執(zhí)行文件加載的時(shí)候,先執(zhí)行文件前部的自解壓代碼,完成目標(biāo)可執(zhí)行文件的解壓縮,當(dāng)目標(biāo)可執(zhí)行文件被完整的解壓縮后,再由系統(tǒng)的可執(zhí)行文件加載器進(jìn)行加載運(yùn)行,從而達(dá)到透明壓縮的目的。
三是文件系統(tǒng)的壓縮。這種方法通過對(duì)文件系統(tǒng)本身的壓縮來實(shí)現(xiàn)壓縮數(shù)據(jù)的目的,通常采用在操作系統(tǒng)的文件系統(tǒng)與存儲(chǔ)設(shè)備驅(qū)動(dòng)之間增加一個(gè)壓縮驅(qū)動(dòng)的層次。這樣,在文件系統(tǒng)進(jìn)行數(shù)據(jù)存取操作的時(shí)候,該壓縮驅(qū)動(dòng)程序同時(shí)完成了對(duì)數(shù)據(jù)的壓縮/解壓縮操作,從而實(shí)現(xiàn)了對(duì)操作性以及使用者的透明性。
由于嵌入式系統(tǒng)的規(guī)模較小,存儲(chǔ)容量有限,嵌入式系統(tǒng)一般都會(huì)對(duì)數(shù)據(jù)進(jìn)行壓縮,以減少嵌入式系統(tǒng)對(duì)存儲(chǔ)空間的總需求,從而降低整個(gè)系統(tǒng)的成本。對(duì)于嵌入式系統(tǒng)來說,由于系統(tǒng)規(guī)模比較小,操作界面簡單甚至沒有操作界面,因此,系統(tǒng)中需要的壓縮方式應(yīng)該是不需要交互操作的透明壓縮方式。
現(xiàn)有技術(shù)的可執(zhí)行文件的加載方法如圖4所示的,在程序開始后,首先判斷該可執(zhí)行文件的類型;然后,建立相應(yīng)的內(nèi)存結(jié)構(gòu)數(shù)據(jù),拷貝進(jìn)程資源;產(chǎn)生新的應(yīng)用程序進(jìn)程;最后,該應(yīng)用程序被調(diào)度執(zhí)行后,結(jié)束該流程。但該加載過程無法用于對(duì)壓縮的可執(zhí)行文件進(jìn)行加載。
目前嵌入式系統(tǒng)中采用的數(shù)據(jù)壓縮方式,主要有使用支持?jǐn)?shù)據(jù)壓縮的文件系統(tǒng)與直接壓縮可執(zhí)行文件兩種方式。采用這兩種方式實(shí)現(xiàn)數(shù)據(jù)壓縮,存在以下的主要問題一.如果在嵌入式系統(tǒng)中使用前述的可執(zhí)行文件的透明方式,則由于該可執(zhí)行文件在運(yùn)行之前需要將原來的可執(zhí)行文件臨時(shí)解壓縮到存儲(chǔ)介質(zhì)中。這種方式對(duì)于存儲(chǔ)介質(zhì)容量有限的嵌入式系統(tǒng)而言,不但沒有減少系統(tǒng)運(yùn)行需要的總的最小存儲(chǔ)介質(zhì)容量,反而增加了存放壓縮后文件存放所需要的存儲(chǔ)空間。所以實(shí)際上這種方式是很不經(jīng)濟(jì)的。
二.壓縮文件系統(tǒng)由于需要在整個(gè)文件系統(tǒng)操作中增加壓縮驅(qū)動(dòng)層的處理,因此不可避免將會(huì)對(duì)系統(tǒng)的性能產(chǎn)生影響。在采用壓縮文件系統(tǒng)的嵌入式系統(tǒng)中,所有的文件數(shù)據(jù)操作都會(huì)經(jīng)過壓縮驅(qū)動(dòng)層的處理,由此導(dǎo)致系統(tǒng)產(chǎn)生較大的額外開銷,這在系統(tǒng)處理能力有限的嵌入式系統(tǒng)中,影響尤其明顯。
三.已有的壓縮文件系統(tǒng)存在一定的介質(zhì)相關(guān)性,而實(shí)際的嵌入式系統(tǒng)的構(gòu)建方式千差萬別,不一定可以在所有的嵌入式系統(tǒng)存儲(chǔ)配置情況下,都找到滿足要求的壓縮文件系統(tǒng)。
四.壓縮文件系統(tǒng)的壓縮率不高。為了達(dá)到更高的數(shù)據(jù)壓縮率,必然需要對(duì)更大容量的相關(guān)數(shù)據(jù)進(jìn)行壓縮,而壓縮更多的相關(guān)數(shù)據(jù)又會(huì)導(dǎo)致數(shù)據(jù)操作的延時(shí)增大。為了平衡性能與效率,一般壓縮文件系統(tǒng)的壓縮效率都不是很高。
五.對(duì)于大多數(shù)的嵌入式系統(tǒng)而言,為了完成特定的專用功能,系統(tǒng)中只需要完成該功能的應(yīng)用程序能夠運(yùn)行即可,因此在系統(tǒng)中不存在很多其他的數(shù)據(jù)文件。在這樣的系統(tǒng)中,實(shí)際上只有可執(zhí)行文件具有壓縮的需求。
由此,現(xiàn)有技術(shù)存在較大缺陷,而有待于加以改進(jìn)。
發(fā)明內(nèi)容
本發(fā)明方法的目的是針對(duì)上述現(xiàn)有技術(shù)的缺陷,提出一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法,適合于嵌入式系統(tǒng)對(duì)其使用的可執(zhí)行文件進(jìn)行壓縮以及實(shí)現(xiàn)對(duì)壓縮后的可執(zhí)行文件的加載,通過對(duì)壓縮后的可執(zhí)行文件的文件頭部的標(biāo)識(shí)類型,減少嵌入式系統(tǒng)所需要的存儲(chǔ)介質(zhì)的容量,達(dá)到降低成本的目的,同時(shí),通過改進(jìn)后的可執(zhí)行文件的文件壓縮以及加載方式,達(dá)到提高采用壓縮文件的嵌入式系統(tǒng)的運(yùn)行效率,降低系統(tǒng)額外資源開銷;通過本發(fā)明方法中的壓縮可執(zhí)行文件的加載方式,可以使各種存儲(chǔ)介質(zhì)配置方式的嵌入式單板均能對(duì)可執(zhí)行文件進(jìn)行壓縮,使用范圍更寬。
本發(fā)明的技術(shù)方案如下一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法,其包括以下步驟a)對(duì)原有結(jié)構(gòu)的可執(zhí)行文件使用可執(zhí)行文件處理方法進(jìn)行處理,修改該可執(zhí)行文件的文件頭中的文件標(biāo)識(shí)符,保持其它數(shù)據(jù)不變,用以表示該文件為采用壓縮的可執(zhí)行文件,產(chǎn)生壓縮后的可執(zhí)行文件;b)使用以下可執(zhí)行文件加載方法加載運(yùn)行所述壓縮后的可執(zhí)行文件b1)進(jìn)行識(shí)別所述壓縮后的可執(zhí)行文件的文件頭部;b2)如果識(shí)別出當(dāng)前加載的可執(zhí)行文件為所述壓縮后的可執(zhí)行文件,則進(jìn)入加載壓縮后可執(zhí)行文件的流程;b3)記錄完成數(shù)據(jù)解壓縮的各分支信息,并對(duì)經(jīng)過壓縮后的各個(gè)數(shù)據(jù)段與代碼段進(jìn)行解壓縮;b4)根據(jù)各個(gè)數(shù)據(jù)段與代碼段的相關(guān)信息,將解壓縮后的各段數(shù)據(jù)按照系統(tǒng)正常加載可執(zhí)行文件的規(guī)則放置在正確的內(nèi)存位置中。所述的壓縮及其加載方法,其中,所述步驟a)還包括以下步驟a1)對(duì)于可執(zhí)行文件的數(shù)據(jù)段與代碼段,保持其重定位的信息在程序段描述表項(xiàng)中,同時(shí)在程序段描述表項(xiàng)中增加該段壓縮數(shù)據(jù)的相關(guān)信息;a2)各程序段數(shù)據(jù)各自按照壓縮算法進(jìn)行壓縮;a3)將壓縮后的程序段組裝成為一個(gè)完整的文件。
所述的壓縮及其加載方法,其中,所述可執(zhí)行文件的加載方法可加載普通可執(zhí)行文件。
本發(fā)明所提供的一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法,采用對(duì)可執(zhí)行文件進(jìn)行壓縮,并將壓縮方法等信息記錄入所述程序段描述表中,然后通過對(duì)文件頭部加以標(biāo)識(shí)記錄該可執(zhí)行文件的是否經(jīng)過壓縮,所述嵌入式系統(tǒng)根據(jù)該文件頭部的標(biāo)識(shí)相應(yīng)加載該經(jīng)過壓縮后的可執(zhí)行文件,并對(duì)對(duì)應(yīng)部分進(jìn)行解壓執(zhí)行;本發(fā)明方法因此具有如下有益效果一、采用本發(fā)明方法的可執(zhí)行文件壓縮及上載方法后,由于該嵌入式系統(tǒng)所需要的存儲(chǔ)介質(zhì)空間減少,系統(tǒng)硬件所預(yù)安裝的存儲(chǔ)介質(zhì)量無需太高,可以降低嵌入式系統(tǒng)的成本;二、用本發(fā)明方法壓縮與加載可執(zhí)行文件,由于不需要把壓縮后的可執(zhí)行文件解壓縮成完整的可執(zhí)行文件后再加載,能夠真正適應(yīng)嵌入式系統(tǒng)的壓縮需求;三、本發(fā)明方法一般只壓縮嵌入式系統(tǒng)中體積最大的可執(zhí)行文件,而不是對(duì)整個(gè)文件系統(tǒng)進(jìn)行壓縮,這樣本發(fā)明方法與現(xiàn)有的壓縮文件系統(tǒng)的方式相比,除了文件加載運(yùn)行時(shí)以外,不會(huì)產(chǎn)生額外的系統(tǒng)開銷,不會(huì)影響系統(tǒng)的運(yùn)行性能;四、就壓縮效率而言,本發(fā)明方法與現(xiàn)有的壓縮文件系統(tǒng)相比,由于無需考慮壓縮率的提高對(duì)系統(tǒng)性能的影響,可以做到更高的壓縮效率,對(duì)于嵌入式系統(tǒng)中經(jīng)常采用的靜態(tài)編譯的可執(zhí)行文件尤為明顯;五、采用本發(fā)明方法對(duì)嵌入式系統(tǒng)中的可執(zhí)行文件進(jìn)行數(shù)據(jù)壓縮,它的實(shí)現(xiàn)與具體的平臺(tái)無關(guān),具有適應(yīng)范圍廣的特點(diǎn)。
總之,本發(fā)明的所述方法具有適用范圍廣、可靠性高、成本低的特點(diǎn)。
附圖中,圖1是現(xiàn)有技術(shù)中操作系統(tǒng)的一般可執(zhí)行文件的結(jié)構(gòu)示意圖;圖2是采用本發(fā)明方法的壓縮方法后的可執(zhí)行文件的結(jié)構(gòu)示意圖;圖3是本發(fā)明方法的壓縮可執(zhí)行文件的流程示意圖;圖4是現(xiàn)有技術(shù)的方法中通常采用的可執(zhí)行文件加載的流程示意圖;圖5是采用本發(fā)明方法的加載壓縮可執(zhí)行文件的流程示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)技術(shù)方案的實(shí)施作進(jìn)一步的詳細(xì)描述如圖1所示的為現(xiàn)有技術(shù)的普通可執(zhí)行文件的結(jié)構(gòu)示意圖,其依次包括一文件頭部,一程序段描述表,數(shù)個(gè)程序段1~N,組裝形成一個(gè)可執(zhí)行文件。
在嵌入式系統(tǒng)中,由于對(duì)儲(chǔ)存空間的使用要求盡量節(jié)約才可以降低系統(tǒng)硬件的成本,因此,本發(fā)明方法采用一特定的壓縮方法,將可執(zhí)行文件進(jìn)行壓縮,壓縮后的文件結(jié)構(gòu)如圖2所示的,依次包括了新文件頭部,該新文件頭部包含了壓縮執(zhí)行文件信息;新程序段描述表,其中包含了壓縮方法等新的段屬性;根據(jù)記錄的壓縮方法,對(duì)應(yīng)各壓縮后的壓縮程序段1~N,然后組裝成壓縮后的可執(zhí)行文件。
如圖3所示的,本發(fā)明方法的所述的適合嵌入式系統(tǒng)的可執(zhí)行文件的壓縮方法,其具體步驟如下a)使用可執(zhí)行文件處理方法來處理原有結(jié)構(gòu)的可執(zhí)行文件(如圖1所示的),產(chǎn)生壓縮后的可執(zhí)行文件(如圖2所示的)。
原有結(jié)構(gòu)的可執(zhí)行文件,需要經(jīng)過處理,得到采用本發(fā)明方法壓縮后的可執(zhí)行文件,原來的文件頭部由于攜帶有該可執(zhí)行文件加載運(yùn)行所需要的相關(guān)信息,所以文件頭部中除了文件類型標(biāo)識(shí)外的其它數(shù)據(jù)保持不變;其主要步驟包括1)修改該可執(zhí)行文件的文件頭部的文件標(biāo)識(shí),表示該文件為采用本發(fā)明方法壓縮后的可執(zhí)行文件;2)對(duì)于數(shù)據(jù)段與代碼段,保持其重定位的信息在所述程序段描述表項(xiàng)中,同時(shí)在該程序段描述表項(xiàng)中增加該段壓縮數(shù)據(jù)的相關(guān)信息,即如各程序段的壓縮方法等;3)各程序段數(shù)據(jù)各自按照相應(yīng)的壓縮算法進(jìn)行壓縮,形成壓縮后的壓縮程序段;4)將以上各部分組裝成為一個(gè)完整的文件,即壓縮后的可執(zhí)行文件。
b)使用新的可執(zhí)行文件的加載方法加載運(yùn)行所述步驟a)中得到的壓縮后的可執(zhí)行文件,該可執(zhí)行文件的加載方法具有加載普通可執(zhí)行文件運(yùn)行的能力,以保證系統(tǒng)中其他正常格式的可執(zhí)行文件能夠加載運(yùn)行,該新的可執(zhí)行文件的加載方法的主要步驟如下b1)首先該加載方法識(shí)別所述步驟a)中產(chǎn)生的壓縮后的可執(zhí)行文件的文件頭;b2)如果識(shí)別出當(dāng)前待加載的可執(zhí)行文件為本發(fā)明方法中的壓縮后的可執(zhí)行文件,則進(jìn)入加載壓縮后的可執(zhí)行文件的流程;b3)該加載方法具有完成數(shù)據(jù)解壓縮的分支,用于對(duì)經(jīng)過壓縮后的各個(gè)數(shù)據(jù)段與代碼段進(jìn)行解壓縮;
b4)根據(jù)各個(gè)數(shù)據(jù)段與代碼段的相關(guān)信息,將解壓縮后的各段數(shù)據(jù)按照系統(tǒng)正常加載可執(zhí)行文件的規(guī)則放置在正確的內(nèi)存位置中;此后進(jìn)入與正常加載方法相同的產(chǎn)生進(jìn)程的過程。
如圖3所示描述了將一個(gè)如圖1所示的普通可執(zhí)行文件,處理成為一個(gè)如圖2所示的壓縮后的可執(zhí)行文件的過程。
主要的處理過程有文件頭部的處理、程序段屬性表的處理與調(diào)整、以及程序段數(shù)據(jù)的壓縮三個(gè)部分。
對(duì)于文件頭,主要是增加識(shí)別壓縮可執(zhí)行文件的特定標(biāo)識(shí),該標(biāo)識(shí)在該可執(zhí)行文件被加載時(shí),由加載器進(jìn)行讀取和識(shí)別,以決定該可執(zhí)行文件的具體加載方式。所述加載器是操作系統(tǒng)的一個(gè)功能部分,負(fù)責(zé)將靜態(tài)的可執(zhí)行程序文件從不可在其上直接執(zhí)行的存儲(chǔ)介質(zhì)如磁盤、某些FLASH等中裝載到操作系統(tǒng)的內(nèi)存空間,并賦予其執(zhí)行能力使其最終可由任務(wù)調(diào)度機(jī)制調(diào)度執(zhí)行。
對(duì)于程序段屬性表的修改,主要是增加各個(gè)程序段壓縮方法的指示信息,該指示信息同樣由可執(zhí)行文件加載器在加載時(shí)讀取并識(shí)別,以決定各個(gè)壓縮程序段的解壓縮方式。
對(duì)于程序段的壓縮,只需要把由各個(gè)程序段屬性表項(xiàng)所確定的程序段在文件中的起始偏移與結(jié)束偏移之間的數(shù)據(jù)段作為壓縮的輸入,采用一定的壓縮方法進(jìn)行數(shù)據(jù)壓縮,即得到該程序段對(duì)應(yīng)的壓縮程序段。
以上處理步驟結(jié)束后,將所述文件頭、程序?qū)傩远伪硪约案鱾€(gè)壓縮后的壓縮程序段連接在一起,就得到需要的壓縮后的可執(zhí)行文件。
如圖3所示的,其處理的具體步驟是,程序開始后,首先設(shè)置待壓縮的可執(zhí)行文件的文件頭部,將其標(biāo)識(shí)為壓縮后的可執(zhí)行文件類型;然后,設(shè)置所述程序段描述表,增加程序段壓縮方法信息;修正由于添加數(shù)據(jù)而導(dǎo)致的文件頭部偏移;掃描程序段描述表,以各程序段的偏移起止為區(qū)間,將該區(qū)間的數(shù)據(jù)作為輸入,依照對(duì)應(yīng)的壓縮算法進(jìn)行壓縮每個(gè)程序段;修正由于數(shù)據(jù)改變而導(dǎo)致的程序段描述表中的各程序段的偏移值;連接所述文件頭部、程序段描述表、各壓縮程序段得到完整的壓縮后的可執(zhí)行文件。
如圖5所示描述了本發(fā)明方法的一可以加載所述壓縮后的可執(zhí)行文件的工作流程。該加載方法同時(shí)具有加載普通可執(zhí)行文件與壓縮后的可執(zhí)行文件的能力對(duì)于壓縮后的可執(zhí)行文件,根據(jù)其文件頭部中指示的程序段描述表的位置,依次讀取并分析各個(gè)程序段描述表項(xiàng),得到各個(gè)程序段的文件內(nèi)偏移、加載地址偏移、壓縮方法等。
首先,該加載方法根據(jù)所述可執(zhí)行文件的文件頭部的文件標(biāo)識(shí),判斷需要加載的可執(zhí)行文件的類型,對(duì)于普通可執(zhí)行文件,則由操作系統(tǒng)按照如圖4所示的正常的加載流程進(jìn)行加載。
然后,根據(jù)各個(gè)程序段的所有屬性數(shù)據(jù),計(jì)算程序加載所需要的內(nèi)存空間。
接著再向操作系統(tǒng)申請(qǐng)加載該程序所需要的連續(xù)內(nèi)存空間。
然后逐個(gè)解壓縮各程序段數(shù)據(jù),并將解壓縮后的數(shù)據(jù)依正??蓤?zhí)行文件的加載位置放置在所申請(qǐng)的內(nèi)存空間中。由于編譯時(shí)刻與實(shí)際運(yùn)行時(shí)刻的內(nèi)存布局可能有不同,需要對(duì)解壓縮后的程序數(shù)據(jù)的基地址等進(jìn)行必要的修正,以保證代碼可以正確執(zhí)行。
然后進(jìn)入操作系統(tǒng)加載應(yīng)用程序的正常步驟,進(jìn)行操作系統(tǒng)相關(guān)的創(chuàng)建進(jìn)程所需的準(zhǔn)備工作,包括申請(qǐng)進(jìn)程運(yùn)行所需要的其它資源、執(zhí)行環(huán)境初始化等。
最后創(chuàng)建一個(gè)操作系統(tǒng)中可執(zhí)行的進(jìn)程(或者線程),并加入該操作系統(tǒng)的調(diào)度隊(duì)列等待運(yùn)行。
該程序加載流程結(jié)束。
由此,本發(fā)明方法實(shí)現(xiàn)了對(duì)可執(zhí)行文件在嵌入式系統(tǒng)中的透明壓縮,并且適應(yīng)范圍寬,同時(shí)可適用于未壓縮的普通可執(zhí)行文件,并且對(duì)可執(zhí)行文件壓縮后占用所述嵌入式系統(tǒng)的空間更小,成本更低。
所述可加載普通可執(zhí)行文件意指本發(fā)明方法在加載已壓縮可執(zhí)行文件的同時(shí)可以加載普通可執(zhí)行文件,此處本發(fā)明程序可從文件頭部了解到被加載的可執(zhí)行文件是否被壓縮,如未被壓縮,直接加載即可,如已被壓縮,加載過程須根據(jù)文件頭部記錄進(jìn)行對(duì)應(yīng)數(shù)據(jù)塊的解壓,因?yàn)榭赡懿煌瑪?shù)據(jù)塊采用了不同的壓縮方法,然后加載到未被解壓的數(shù)據(jù)應(yīng)加載的位置上即可。也即本發(fā)明方法主要包括壓縮和加載兩個(gè)過程。
本發(fā)明的技術(shù)方案對(duì)于本領(lǐng)域普通技術(shù)人員來說,可能根據(jù)本發(fā)明的技術(shù)內(nèi)容進(jìn)行其他等同改變或替換,而所有這些等同改變或替換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法,其包括以下步驟a)對(duì)原有結(jié)構(gòu)的可執(zhí)行文件使用可執(zhí)行文件處理方法進(jìn)行處理,修改該可執(zhí)行文件的文件頭中的文件標(biāo)識(shí)符,保持其它數(shù)據(jù)不變,用以表示該文件為采用壓縮的可執(zhí)行文件,產(chǎn)生壓縮后的可執(zhí)行文件;b)使用以下可執(zhí)行文件加載方法加載運(yùn)行所述壓縮后的可執(zhí)行文件b1)進(jìn)行識(shí)別所述壓縮后的可執(zhí)行文件的文件頭部;b2)如果識(shí)別出當(dāng)前加載的可執(zhí)行文件為所述壓縮后的可執(zhí)行文件,則進(jìn)入加載壓縮后可執(zhí)行文件的流程;b3)記錄完成數(shù)據(jù)解壓縮的各分支信息,并對(duì)經(jīng)過壓縮后的各個(gè)數(shù)據(jù)段與代碼段進(jìn)行解壓縮;b4)根據(jù)各個(gè)數(shù)據(jù)段與代碼段的相關(guān)信息,將解壓縮后的各段數(shù)據(jù)按照系統(tǒng)正常加載可執(zhí)行文件的規(guī)則放置在正確的內(nèi)存位置中。
2.根據(jù)權(quán)利要求1所述的壓縮及其加載方法,其特征在于,所述步驟a)還包括以下步驟a1)對(duì)于可執(zhí)行文件的數(shù)據(jù)段與代碼段,保持其重定位的信息在程序段描述表項(xiàng)中,同時(shí)在程序段描述表項(xiàng)中增加該段壓縮數(shù)據(jù)的相關(guān)信息;a2)各程序段數(shù)據(jù)各自按照壓縮算法進(jìn)行壓縮;a3)將壓縮后的程序段組裝成為一個(gè)完整的文件。
3.根據(jù)權(quán)利要求2所述的壓縮及其加載方法,其特征在于,所述可執(zhí)行文件的加載方法可加載普通可執(zhí)行文件。
全文摘要
本發(fā)明的一種嵌入式系統(tǒng)中可執(zhí)行文件的壓縮及其加載方法,其包括以下步驟對(duì)原有結(jié)構(gòu)的可執(zhí)行文件使用可執(zhí)行文件處理方法進(jìn)行處理,修改該可執(zhí)行文件的文件頭中的文件標(biāo)識(shí)符,保持其它數(shù)據(jù)不變,用以表示該文件為采用壓縮的可執(zhí)行文件,產(chǎn)生壓縮后的可執(zhí)行文件;識(shí)別所述壓縮后的可執(zhí)行文件的文件頭部,如果為所述壓縮后的可執(zhí)行文件,則該加載方法完成數(shù)據(jù)解壓縮的分支,對(duì)各個(gè)數(shù)據(jù)段與代碼段進(jìn)行解壓縮;將解壓縮后的各段數(shù)據(jù)按照系統(tǒng)正常加載可執(zhí)行文件的規(guī)則放置在正確的內(nèi)存位置中。本發(fā)明方法對(duì)于嵌入式系統(tǒng)適用范圍廣、可靠性高、成本低。
文檔編號(hào)G06F9/445GK1556472SQ20031011766
公開日2004年12月22日 申請(qǐng)日期2003年12月31日 優(yōu)先權(quán)日2003年12月31日
發(fā)明者朱佐亮, 蘆東昕, 白英杰, 黃燁明, 楊新, 王曉東 申請(qǐng)人:中興通訊股份有限公司