專利名稱::用于提供在無線裝置中使用的整體映像的系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及更新無線裝置的軟件的系統(tǒng)和方法,更具體的,涉及用于提供在無線裝置中使用的整體映像(monolithicimage)的系統(tǒng)和方法。
背景技術(shù):
:一般來說,手機(jī)和其他無線裝置包括在形式上為存儲(chǔ)在存儲(chǔ)器中的可執(zhí)行指令和不可執(zhí)行數(shù)據(jù)的軟件。所述軟件提供這樣一種具有執(zhí)行各種功能的能力的裝置,例如通過無線網(wǎng)絡(luò)進(jìn)行通信,處理諸如呼叫等待和呼叫轉(zhuǎn)移之類的呼叫特性,以及維持日歷和地址簿。然而,一旦無線裝置被提供給終端用戶,那么提供附加的軟件或?qū)σ呀?jīng)安裝在裝置內(nèi)的軟件進(jìn)行修正就變得非常困難。為了解決這個(gè)問題,開發(fā)了無線固件(firmwareovertheair,F(xiàn)OFA)使得服務(wù)提供者通過無線網(wǎng)絡(luò)向無線裝置發(fā)送軟件更新。這種更新可以向已經(jīng)存在于無線裝置上的軟件提供附加的功能或提供錯(cuò)誤修正(bugfix)來解決現(xiàn)有軟件存在的問題。然而,雖然諸如FOFA之類的更新方法提供了向無線終端發(fā)送軟件的方法,但是采用這種更新過程還存在問題。因此,向無線終端通過無線接口來有效提供軟件是富于挑戰(zhàn)的問題。
發(fā)明內(nèi)容因此,本發(fā)明被提出來解決現(xiàn)有技術(shù)中發(fā)生的上述問題,以及本發(fā)明的目的是提供用于補(bǔ)丁最小化工具(patchminimizationtool)的系統(tǒng)和方法,其在提供在無線裝置中使用的映像中配置最終的映像,采用這種方式將對于最終映像的下次更新的影響最小化。在本發(fā)明的一個(gè)實(shí)施例中,提出了提供在無線裝置中使用的整體映像的方法。該方法包括識別形成以機(jī)器代碼表示的映像的多個(gè)組件,以及對多個(gè)組件中的每一個(gè)組件,建造包含對于其它組件可訪問的該組件內(nèi)的所有符號的輸出符號列表,和包含在組件所需要的、其他組件內(nèi)的所有符號的輸入符號列表。該方法還包括建造重定向機(jī)制,該機(jī)制包含有對在每個(gè)組件的輸出符號列表中的每個(gè)符號的、在至少一個(gè)其他組件的輸入符號列表中的間接引用(reference)。對于多個(gè)組件中的每個(gè)組件,改變對另一個(gè)組件中的符號的每個(gè)直接引用來引用與重定向機(jī)制中的符號相關(guān)聯(lián)的間接引用,其中組件內(nèi)的引用不被改變。創(chuàng)建包含有已改變的組件和重定向機(jī)制的最終映像。在本發(fā)明的另一個(gè)實(shí)施例中,提供了用于向移動(dòng)裝置提供可執(zhí)行映像的方法。該方法包括從匯編器接收映像,并識別形成映像的多個(gè)組件。從每個(gè)組件中識別可輸出的所有符號以及從另一個(gè)組件中識別被每個(gè)組件輸入的所有符號。建造包含有由一個(gè)組件輸出而被另一個(gè)組件輸入的每個(gè)符號的地址的重定向機(jī)制;修改每個(gè)組件來改變對與另一個(gè)組件相關(guān)聯(lián)的符號的每個(gè)直接引用為對重定向機(jī)制的引用。調(diào)用鏈接器來基于修改后的組件鏈接最終映像。在本發(fā)明的另一個(gè)實(shí)施例中,方法包括從形成以機(jī)器語言代碼接收的映像的多個(gè)模塊中建造至少第一和第二組件。為第一和第二個(gè)組件的每一個(gè)建造輸出符號列表和輸入符號列表。將第一組件的輸出符號列表與第二組件的輸入符號列表相比較,并且將第二組件的輸出符號列表與第一組件的輸入符號列表相比較,來識別第一和第二組件中的一個(gè)的輸出列表以及第一和第二組件中的另一個(gè)的輸入列表上的任何符號。建造包含有每個(gè)被識別的符號的位置的重定向機(jī)制。修改第一組件來將對第二個(gè)組件的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用,以及修改第二個(gè)組件來將對第一個(gè)組件的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用。在本發(fā)明的另一個(gè)實(shí)施例中,提供了用于由不支持動(dòng)態(tài)鏈接或動(dòng)態(tài)共享的操作系統(tǒng)控制的移動(dòng)裝置的靜態(tài)的整體映像。該映像包括至少一包括有從構(gòu)成該映像的任何其它組件由形成該映像的任何組件輸入的映像中的每個(gè)符號的地址的重定向機(jī)制。該映像還包括多個(gè)組件,其中每個(gè)組件具有相對于組件本身所包含的任何符號的直接引用,以及具有相對于用于從另一個(gè)組件輸入的任何符號的重定向機(jī)制的引用。在本發(fā)明的另一個(gè)實(shí)施例中,系統(tǒng)包含有處理器,與處理器相耦合的存儲(chǔ)器單元,以及多個(gè)存儲(chǔ)在存儲(chǔ)器中,由處理器執(zhí)行的指令。該指令包括用于完成以下功能的指令將用于無線裝置的整體映像從匯編代碼轉(zhuǎn)換為機(jī)器代碼,基于用機(jī)器代碼所識別的模塊建造多個(gè)組件。該指令包括這樣的指令識別每個(gè)組件可輸出的每個(gè)符號和每個(gè)組件輸入的每個(gè)符號,建造包含有可由一個(gè)組件輸出的、由另一個(gè)組件輸入的每個(gè)符號的重定向機(jī)制。該指令還包括這樣的指令修改每個(gè)組件將對與另一個(gè)組件相關(guān)聯(lián)的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用,以及鏈接已修改的組件和重定向機(jī)制來創(chuàng)建整體映像的最終版本。從下面結(jié)合附圖的詳細(xì)描述中本發(fā)明的各方面將會(huì)更好的理解本發(fā)明。依照產(chǎn)業(yè)實(shí)踐標(biāo)準(zhǔn),各個(gè)特征不必依照比例進(jìn)行繪出。實(shí)際上,為了論述的清楚,各個(gè)特征的尺寸可以任意的放大或縮小。圖1為示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的系統(tǒng)的視圖。圖2為圖1中映像創(chuàng)建系統(tǒng)的一個(gè)實(shí)施例的方框圖。圖3為圖1中無線裝置的一個(gè)實(shí)施例的方框圖。圖4A-4C描述了各種包含有整體映像的存儲(chǔ)器的實(shí)施例。圖5為根據(jù)本發(fā)明的優(yōu)選實(shí)施例提供靜態(tài)整體映像的重定向機(jī)制的方法的流程圖。圖6描述了用于創(chuàng)建可執(zhí)行文件的編輯系統(tǒng)的實(shí)施例。圖7為根據(jù)本發(fā)明的優(yōu)選實(shí)施例向靜態(tài)整體映像提供偽DLL功能的方法的流程圖。圖8A和8B描述了各種包含有整體映像和重定向機(jī)制的存儲(chǔ)器的實(shí)施例。圖9為根據(jù)本發(fā)明的優(yōu)選實(shí)施例的用于更新具有重定向機(jī)制的現(xiàn)存的整體映像的方法的流程圖。具體實(shí)施例方式應(yīng)該理解在下面的描述中提供了多種不同的實(shí)施例,或?qū)嵗脕韺?shí)現(xiàn)本發(fā)明的不同特征。在下面將描述組件和設(shè)備的詳細(xì)實(shí)例用來簡化本發(fā)明。當(dāng)然,這些僅是示例并不傾向用于限制。另外,本發(fā)明將在各種實(shí)例中重復(fù)參考標(biāo)記和/或字母。這種重復(fù)用于簡化和分類的目的,而不是在本質(zhì)上指示各種實(shí)施例和/或所討論的構(gòu)造之間的關(guān)系。參考圖1,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)100。根據(jù)本發(fā)明的該系統(tǒng)100包括映像創(chuàng)建系統(tǒng)102、無線網(wǎng)絡(luò)104、和無線設(shè)備106。在下面將會(huì)作出更加詳細(xì)的描述,映像創(chuàng)建系統(tǒng)102提供創(chuàng)建包含有可執(zhí)行指令和/或數(shù)據(jù)的映像的功能。該映像通過無線網(wǎng)絡(luò)104被傳遞到無線設(shè)備106。然后無線設(shè)備106使用所傳遞的映像來向用戶提供各種各樣的功能,并通過無線網(wǎng)絡(luò)104和其他設(shè)備進(jìn)行通信。該映像可以包括各種功能和數(shù)據(jù)的組合,而且附加特性和錯(cuò)誤修正被采用來更新由映像創(chuàng)建系統(tǒng)102創(chuàng)建的映像。網(wǎng)絡(luò)104可以是任何類型的網(wǎng)絡(luò),包括集中式和專門(adhoc)網(wǎng)絡(luò),以及可以采用任何類型的網(wǎng)絡(luò)技術(shù),包括碼分多址(CDMA),全球移動(dòng)通信系統(tǒng)(GSM),正交頻分多址(OFDM),或類似的通信技術(shù)。在本實(shí)例中,該網(wǎng)絡(luò)被描述為基于分組的網(wǎng)絡(luò),但是應(yīng)該理解,本發(fā)明公開應(yīng)用于任何類型的傳輸。參考圖2,計(jì)算機(jī)被圖示為圖1中的映像創(chuàng)建系統(tǒng)102的一個(gè)實(shí)施例。該映像創(chuàng)建系統(tǒng)102可以包括中央處理單元(“CPU”)202、存儲(chǔ)器單元204、輸入/輸出(“I/O”)裝置206和網(wǎng)絡(luò)接口208。該網(wǎng)絡(luò)接口208可以是,例如,一個(gè)或多個(gè)無線和/或有線網(wǎng)絡(luò)接口卡(NIC),其每一個(gè)都與媒介訪問控制(MAC)地址相關(guān)聯(lián)。該網(wǎng)絡(luò)接口208可以和網(wǎng)絡(luò)104直接耦合,或通過一個(gè)或多個(gè)其它網(wǎng)絡(luò)(未示出)被耦合。每個(gè)組件202、204、206和208可以通過總線系統(tǒng)210相互連接。應(yīng)該理解,映像創(chuàng)建系統(tǒng)102可以被不同地配置,以及所列出的每個(gè)組件實(shí)際上代表多個(gè)不同的組件。例如,CPU202可以代表多個(gè)處理器或分布式處理系統(tǒng);存儲(chǔ)器單元204可以包括不同級別的高速緩沖存儲(chǔ)器、主存儲(chǔ)器、硬盤以及遠(yuǎn)端存儲(chǔ)位置;以及I/O設(shè)備206可以包括監(jiān)控器、鍵盤以及類似的器件。而且,雖然已經(jīng)在映像創(chuàng)建系統(tǒng)102中示出,但是應(yīng)該理解,一些組件(例如鍵盤)可以在物理上位于映像創(chuàng)建系統(tǒng)的外面。此外,組件202、204、206和208的一些或所有可以是分布式的。因此,映像創(chuàng)建系統(tǒng)可以被非常靈活地配置。參考圖3,描述了圖1的無線設(shè)備106的一個(gè)實(shí)施例。該無線裝置106包括處理器302、存儲(chǔ)器304、和無線通信系統(tǒng)306。應(yīng)該理解,該無線裝置106可以是任何移動(dòng)設(shè)備等,包括蜂窩電話、個(gè)人數(shù)字助理以及膝上型電腦。另外,給定操作系統(tǒng)被用來控制無線裝置106,還可以提供用戶接口,通過該用戶接口,該裝置的用戶可以訪問和利用各種功能。無線裝置106的存儲(chǔ)器304包括可執(zhí)行指令的二進(jìn)制映像以及包括在無線裝置內(nèi)的數(shù)據(jù),雖然已知并不是所有的指令和數(shù)被包括在映像中。在本實(shí)例中,該映像為整體映像,該整體映像包含靜態(tài)關(guān)系中的指令和數(shù)據(jù),其在被傳遞到無線裝置之前被創(chuàng)建。雖然這種映像經(jīng)常被用于具有相對簡單的操作系統(tǒng)的裝置中,其中該操作系統(tǒng)不支持動(dòng)態(tài)鏈接,例如動(dòng)態(tài)連接庫(DLL)或動(dòng)態(tài)共享對象(DSO),但是當(dāng)更新無線裝置106時(shí),靜態(tài)整體映像的使用帶來了許多問題。這些問題常常是源于當(dāng)存在于裝置的映像采用新映像被更新時(shí)所發(fā)生的映像更新。當(dāng)映像更新發(fā)生時(shí),裝置上的映像和被傳遞到裝置的新映像之間的差別被稱作兩個(gè)映像間的映像增量(例如變化量)。這種問題是發(fā)生在當(dāng)映像的更新導(dǎo)致映像的兩部分間的引用發(fā)生改變時(shí)的引用改變傳播問題。因?yàn)橛诚袷庆o止的,所以當(dāng)調(diào)用不再在同一地址的程序模塊時(shí),改變映像的一部分會(huì)破壞映像的功能。該引用改變傳播問題一般說來不是支持動(dòng)態(tài)鏈接,例如通過使用DLL或DSO,的操作系統(tǒng)的問題。眾所周知,一般說來DLL可被定義為包含有可執(zhí)行代碼和/或數(shù)據(jù)的文件,其在加載時(shí)和運(yùn)行時(shí)而不是在鏈接期間綁定到程序。多個(gè)應(yīng)用程序可以同時(shí)共享DLL中的代碼和數(shù)據(jù)。DLL與WINDOWS操作系統(tǒng)相關(guān)聯(lián)。在此,WINDOWS為華盛頓州Redmond的微軟公司的注冊商標(biāo)。DSO一般被定義為提供將運(yùn)行時(shí)進(jìn)行加載的特定格式的程序代碼的片段建造(build)至可執(zhí)行程序的地址空間中的方式的機(jī)制。DSO獲得對可執(zhí)行程序符號集的認(rèn)識,就像它已經(jīng)被靜態(tài)鏈接到其上一樣。DSO與UNIX/LINUX操作系統(tǒng)相關(guān)聯(lián)。當(dāng)映像被更新時(shí)缺少對DLL和DSO的支持可能會(huì)發(fā)生問題。因?yàn)檎w映像為指令和數(shù)據(jù)的固定的二進(jìn)制表示,因此一旦映像完成各種單元的地址是靜態(tài)的。這使得很難支持映像的增量更新,因?yàn)楫?dāng)這種更新發(fā)生時(shí)會(huì)引起地址的改變。例如,當(dāng)映像被創(chuàng)建時(shí),映像中的子程序與固定的地址相關(guān)。該地址被插入到需要調(diào)用子程序的映像的其他部分中。然而,更新將使得子程序從原始地址移動(dòng)到新地址。因?yàn)橛诚竦钠渌糠直混o態(tài)地鏈接到原始地址,所以他們不再能夠調(diào)用子程序,并且錯(cuò)誤可能會(huì)發(fā)生。因此,在執(zhí)行增量更新時(shí)在整個(gè)整體映像中無法傳播引用改變,在無線裝置的操作中會(huì)導(dǎo)致很嚴(yán)重的問題。這個(gè)問題將在圖4A-4C中作更加詳細(xì)的描述。參考圖4A,描述了整體映像400的一個(gè)實(shí)施例。整體映像400包括第一和第二指令部分402和406,以及數(shù)據(jù)部分404。應(yīng)該理解,部分402、404和406僅是為了描述的目的,可以提供指令和數(shù)據(jù)的各種組合或組織。如所描述,整體映像的每個(gè)部分402、404和406和下一個(gè)部分相鄰,而且在之后有存儲(chǔ)器的可用部分408,并與第二指令部分406相鄰。然而,如果除了第二指令部分406之外的任何部分被更新,那么就不會(huì)存在和正在更新的部分相鄰的、可以存儲(chǔ)更新的可用存儲(chǔ)器。另外參考圖4B,圖4A的映像將采取分段的鏈接結(jié)構(gòu)被描述。分段的鏈接結(jié)構(gòu)將映像400分成多個(gè)部分(例如,第一、第二和第三部分402、404和408),并采用可用存儲(chǔ)器塊將各個(gè)部分分離。例如,有可用部分410與第一指令部分402相鄰,可用部分412與第二指令部分404相鄰,和先前被描述的分離的可用部分408。應(yīng)該注意,可用部分408因?yàn)榭捎貌糠?10和412的存在變小了??捎貌糠譁?zhǔn)許在不需要來重新創(chuàng)建整個(gè)整體映像的情況下部分402和404的一些擴(kuò)展。這種解決方法在一些情況下是可行的,但是沒能解決引用改變傳播問題,這是因?yàn)榉侄卫^續(xù)保持鏈接,而且一般來說不能解決當(dāng)更新需要比被已經(jīng)保留的存儲(chǔ)器更多的存儲(chǔ)器時(shí)發(fā)生的問題,如圖4C所示的。另外參考圖4C,指令部分402需要比在可用部分412原始被分配的更多的空間。因此,如果指令部分402繼續(xù)作為一個(gè)鄰近塊,它將與重疊部分414指示的數(shù)據(jù)部分404相重疊。在該實(shí)例中,該重疊部分414會(huì)蓋寫數(shù)據(jù)部分404,重疊部分414會(huì)被分成不相鄰的部分或單獨(dú)的部分,不相鄰的部分和單獨(dú)的部分被部分地存儲(chǔ)在不相鄰的可用存儲(chǔ)器中,或數(shù)據(jù)部分404將會(huì)被移動(dòng)。明顯地,蓋寫數(shù)據(jù)部分404的開頭部分將會(huì)破壞功能。如先前所述的,移動(dòng)數(shù)據(jù)部分404也會(huì)損害功能,這是因?yàn)殪o態(tài)鏈接的引用會(huì)被破壞。雖然分段的鏈接結(jié)構(gòu)一般來說是比采用不具有由分段的鏈接結(jié)構(gòu)所提供的可用相鄰存儲(chǔ)器空間的映像文件更好的解決方案,但是該結(jié)構(gòu)不能很滿意地解決與整體映像相關(guān)的問題。例如,為了產(chǎn)生分段的鏈接結(jié)構(gòu),將采用諸如分散文件(scatterfile)之類的文件。眾所周知,分散文件被用來告知鏈接器從哪里將文件或?qū)ο笱b載到存儲(chǔ)器。一般來說,形成分散文件要耗費(fèi)時(shí)間。而且,分段的鏈接結(jié)構(gòu)趨向于耗費(fèi)相對較大量的存儲(chǔ)器,這是因?yàn)楦鞣侄伍g剩余的可用部分應(yīng)該大到足夠能夠在相應(yīng)的分段中接收預(yù)期的容量(size)增加。盡管那樣,可用部分因?yàn)楦潞湾e(cuò)誤修正會(huì)相對比較快地溢出,這就意味著新的分散文件必須產(chǎn)生。在各分段間移動(dòng)函數(shù)還需要?jiǎng)?chuàng)建新的分散文件。分段的鏈接結(jié)構(gòu)所需要的復(fù)雜性和空閑存儲(chǔ)器一般來說和代碼大小成比例。一般來說,不可能關(guān)于第三方程序庫來執(zhí)行分段的鏈接。并且,分段的鏈接結(jié)構(gòu)維持分段間的引用,因此修改分段將會(huì)導(dǎo)致需要更新映像中所有的引用。因?yàn)檫@樣或其它的原因,對讀寫數(shù)據(jù)、只讀數(shù)據(jù)和非初始化數(shù)據(jù)的改變將導(dǎo)致映像的大變化。一般來說,對于整體映像所體現(xiàn)的軟件幾乎不存在靈活性。采用無線裝置以外的工具來創(chuàng)建映像然,后當(dāng)完成時(shí)被傳遞到該無線裝置。因?yàn)闊o線裝置的相對比較簡單的操作系統(tǒng)和整體映像的使用,所以諸如附加特性和錯(cuò)誤修正之類的更新可能需要修改整個(gè)映像以及被傳遞到無線裝置。這由于一些原因經(jīng)常是不切實(shí)際的。不但在較長周期的時(shí)間內(nèi)利用消費(fèi)者的帶寬是不切實(shí)際的,而且政府法規(guī)可能限制進(jìn)行更新的時(shí)間量。例如,政府托管(mandate)的911限制可能需要更新不超過5分鐘。同樣,更新移動(dòng)裝置上現(xiàn)有映像的大部分經(jīng)常是不可行的。參考圖5,方法500描述了當(dāng)創(chuàng)建靜態(tài)的整體映像時(shí)用于解決引用改變傳播問題的過程的一個(gè)實(shí)施例。根據(jù)方法500,在步驟502,方法500識別組成映像的多個(gè)組件。如同在之后將詳細(xì)描述那樣,組件表示構(gòu)成映像的模塊并且可以與從相同映像中構(gòu)成的分段的鏈接結(jié)構(gòu)的分段幾乎沒有關(guān)系或毫無關(guān)系。組件或模塊可以是默認(rèn)型的或用戶定義的。在步驟504,輸出符號列表和輸入符號列表需要被針對每個(gè)組件建造。該輸出符號列表包含所有組件外面可用的符號,例如變量和函數(shù)。該輸入符號列表包含該組件所需要從其它組件調(diào)用的所有符號。應(yīng)該理解,輸出符號列表和輸入符號列表被用于該例子的目的,識別和跟蹤符號的其它過程也可被采用。例如,包含有所有輸出符號的單個(gè)的列表和它們相應(yīng)的組件可被采用,以及另一個(gè)列表可包含所有輸入符號和它們相應(yīng)的組件。在另一個(gè)實(shí)例中,兩個(gè)列表會(huì)合并為單個(gè)列表。識別可從組件輸出的符號和由組件從另一個(gè)組件輸入的符號的其它機(jī)制也可被采用。在步驟506,一個(gè)或多個(gè)重定向機(jī)制,例如跳轉(zhuǎn)表(jumptable)或鑲面(veneer)代碼,基于輸出和輸入符號列表被建造。跳轉(zhuǎn)表是包含有子程序地址的陣列(array)。例如,跳轉(zhuǎn)表向每個(gè)子程序提供間接的引用。因此,如果組件引用該陣列的具體元素,則該組件將會(huì)被重定向到相應(yīng)的子程序。鑲面是指令的短序列,被用來進(jìn)行子程序調(diào)用。調(diào)用組件采用諸如有限范圍分支指令之類的指令來傳遞控制到鑲面。然后鑲面通過允許傳遞到適當(dāng)目的地的機(jī)制來傳遞控制到目的地子程序。因此,跳轉(zhuǎn)表和鑲面都使能重定向。應(yīng)該理解,可以采用其它重定向機(jī)制來代替,雖然需要一些修改,這取決于所采用的具體的重定向機(jī)制。為了建造重定向機(jī)制,該方法500檢查輸出和輸入符號列表來識別既包含在輸出符號列表又包含在輸入符號列表的符號。僅是既包含在輸出符號列表又包含在輸入符號列表中的符號可被包括在重定向機(jī)制中。在步驟508,組件間的所有的直接引用都被更改來指向重定向機(jī)制。例如,包含有對另一個(gè)組件中的函數(shù)的直接引用調(diào)用的組件會(huì)被修改來包含有對重定向機(jī)制的引用調(diào)用,那么這將會(huì)將調(diào)用組件重定向到適當(dāng)?shù)暮瘮?shù)。因此,組件間的所有的直接引用都被去除并且映像被提供有偽DLL功能。對組件的任何改變將會(huì)通過改變重定向機(jī)制中的適當(dāng)?shù)刂繁环从常挥酶淖冃枰L問改變的組件的每個(gè)組件。參考圖6,編譯(compiling)系統(tǒng)600的一個(gè)實(shí)施例采用各種模塊來編譯圖1中的映像創(chuàng)建系統(tǒng)102的可執(zhí)行程序612。一般來說,軟件程序采用高級語言(例如源代碼)來編寫,并被轉(zhuǎn)換為機(jī)器可讀語言,例如目標(biāo)代碼。雖然在術(shù)語和實(shí)際處理中會(huì)發(fā)生一些變化,但是編譯系統(tǒng)600提供用于公用轉(zhuǎn)換處理的模塊,包括預(yù)處理程序602、編譯器604、匯編器606和鏈接器610。這些預(yù)處理程序602、編譯器604、匯編器606和鏈接器610是被共同使用的模塊,該模塊一般說來與具體的編程語言和/或平臺相關(guān)。偽DLL鏈接器608被插入到匯編器606和鏈接器610間的處理來修改在鏈接前的匯編器的輸出,這將在后面做更加詳細(xì)的討論。這種安排使偽DLL鏈接器608能夠在各種文件變得太大而不容易操作前操作各種文件。預(yù)處理程序602負(fù)責(zé)收集將要被編譯的源程序的不同部分。編譯器604獲得預(yù)處理程序602的輸出,并將它轉(zhuǎn)換為匯編語言代碼,而且匯編器606將匯編語言代碼翻譯成機(jī)器語言代碼。傳統(tǒng)上,鏈接器610隨后會(huì)獲得機(jī)器語言代碼,識別機(jī)器語言代碼所參考到的任何程序庫或其它外部模塊,并將這些模塊綁定到機(jī)器語言代碼從而構(gòu)成最終的映像612。在本實(shí)例中,偽DLL鏈接器608接收由匯編器606所創(chuàng)建的機(jī)器語言代碼,修改該代碼,然后調(diào)用鏈接器610來鏈接被修改的代碼。應(yīng)該注意,匯編器606和鏈接器610基本上不會(huì)從即使是不包含有偽DLL鏈接器608的系統(tǒng)而改變。例如,匯編器606可以被修改來調(diào)用偽DLL鏈接器608而不是鏈接器610,或者偽DLL鏈接器可以從匯編器截取調(diào)用。在另一個(gè)實(shí)施例中,匯編器輸出可被寫入文件,而且偽DLL鏈接器608按照調(diào)用鏈接器610之前的文件操作。在此,鏈接器610可以不被改變。按照這種方法,因?yàn)樾枰R別和操作機(jī)器代碼級的代碼以及實(shí)際上一般說來機(jī)器代碼被創(chuàng)建用于具體的平臺/架構(gòu),所以應(yīng)該理解,不同的偽DLL鏈接器608需要被寫出用于被提供有偽DLL功能的每個(gè)平臺。例如,不同的偽DLL鏈接器可被作為插件或者模塊被提供給用來操作目標(biāo)代碼的編程工具,例如BFD(二進(jìn)制文件描述符)。眾所周知,BFD為采用程序庫來準(zhǔn)許應(yīng)用程序采用一組子程序來操作目標(biāo)文件而不管目標(biāo)文件的格式的軟件工具。新的目標(biāo)文件格式可以通過創(chuàng)建新的BFD后臺(backend)以及將其加入到BFD程序庫而被支持。BFD被分成前臺(frontend)和一個(gè)或多個(gè)后臺,每個(gè)目標(biāo)文件格式有一個(gè)前臺。該前臺提供用戶界面并管理存儲(chǔ)器和各種標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu),同時(shí)決定采用哪個(gè)前臺以及何時(shí)調(diào)用后臺子程序。每個(gè)后臺提供一組前臺可以使用的調(diào)用來維持它的標(biāo)準(zhǔn)形式。因此,用于具體平臺/結(jié)構(gòu)的每個(gè)偽DLL鏈接器可被提供作為對諸如BFD之類的工具的后臺。參考圖7,在另一個(gè)實(shí)施例中,方法700被用來處理當(dāng)在映像中存在對整體映像效果(impact)直接引用的變化時(shí)所引起的問題。在本實(shí)例中,在編譯最終映像期間方法700發(fā)生在匯編過程和鏈接過程之間,如上參考圖6所述。在方法700完成后,最終映像是靜態(tài)的、具有重定向機(jī)制的整體映像。雖然為了描述的目的在本實(shí)例中跳轉(zhuǎn)表被用作重定向機(jī)制,但是應(yīng)該理解,跳轉(zhuǎn)表可被其它重定向機(jī)制,例如鑲面,代替,雖然要依據(jù)所采用的具體的重定向機(jī)制需要做一些修改。在步驟702,從匯編器接收映像。偽DLL鏈接器應(yīng)能夠識別和操作由匯編器創(chuàng)建的機(jī)器語言代碼的部分。如上所述,需要不同的偽DLL鏈接器用于所支持的每個(gè)具體的平臺/結(jié)構(gòu)。在步驟704,方法700確定是否存在定義文件,例如組件描述文件。該組件描述文件使用戶能夠定義將要用來形成最終映像的一些或所有的組件。在本實(shí)例中,組件并不限于由匯編器定義的文件或?qū)ο?,雖然如果希望的話可以將其進(jìn)行定義。每個(gè)組件可以是模塊的集合,其中模塊可以是可再定位的文件,而集合可以被重新定義,例如,可以是檔案。例如,具有*.a或*.lib的名稱的檔案可以是包含有多個(gè)模塊的程序庫,而程序庫本身可以被識別為組件。為了識別組件,方法700檢查機(jī)器語言代碼來識別各段代碼間的相似性(affinity),然后,除非有另外的指引,基于這些相似性來構(gòu)造組件。如果不存在組件描述文件,方法700進(jìn)入到步驟706,在此采用默認(rèn)的定義來識別和構(gòu)造組件。例如,默認(rèn)的定義可定義組件為帶有被合并為單個(gè)組件的任何非程序庫文件的相關(guān)模塊的集合。例如,默認(rèn)定義可定義組件為單個(gè)程序庫或其它被定義的集合。因此,如果存在有兩個(gè)程序庫和多個(gè)非程序庫文件,在步驟706將會(huì)識別出三個(gè)組件。然而,如果存在組件描述文件,方法700轉(zhuǎn)到步驟708,在此其采用組件描述文件722來識別和構(gòu)造組件如同文件中所描述的。這使得用戶能夠像希望的那樣來定義組件。例如,用戶可以將多個(gè)程序庫組合成單一組件,將程序庫分割成多個(gè)組件等。應(yīng)該理解,采用用戶定義某些組件和允許其它組件根據(jù)默認(rèn)定義被定義,可以將用戶定義和默認(rèn)定義相混合。為了示例的目的,另外參考圖4A,指令部分402和數(shù)據(jù)部分404為組件(“組件A”),以及指令部分406是組件(“組件B”)。在步驟710,方法700為每個(gè)組件構(gòu)造輸出符號列表。在本實(shí)例中,符號是變量或函數(shù)。輸出符號列表是對于其他組件可以訪問的、組件內(nèi)所有符號的列表(例如,與組件的應(yīng)用程序接口(API)相關(guān)的任何符號)。繼續(xù)先前圖4A的實(shí)例,假設(shè)指令部分402包括三個(gè)函數(shù)func1,func2和func3,數(shù)據(jù)部分404包括變量X,指令部分406包括函數(shù)func4和變量Y和Z。這將在下面的表1中示出。表1函數(shù)func1和func3都是在組件A以外可以訪問的(即,func1和func3都在組件A的API),但是func2不是。變量X在組件A以外可以訪問,但是Y不是。函數(shù)func4和變量Z都是在組件B以外可以訪問的。從它們的組件以外可得到的每個(gè)函數(shù)和變量被放置在該組件的輸出列表中。這將在下面的表2中示出。表2在步驟712,方法700為每個(gè)組件構(gòu)造輸入符號列表。該輸入符號列表是組件需要從其他組件調(diào)用的所有符號的列表。同時(shí),輸出和輸入符號列表包含組件間所有可能的引用。繼續(xù)先前的實(shí)例,函數(shù)func1和func2僅調(diào)用函數(shù)func1、func2和func3,但是func3調(diào)用func4,func4被包含在組件B中。例如,調(diào)用在組件A的內(nèi)部。另外,組件A需要訪問變量X(組件A內(nèi))以及組件Z(組件B內(nèi))。組件B需要從組件A訪問func1。被組件從另一個(gè)組件調(diào)用的每個(gè)函數(shù)和變量被放置在調(diào)用組件的輸入列表中。例如,變量Z將被放置在組件A的輸入列表中,這是因?yàn)樗话诮M件B內(nèi),但是變量X將不會(huì)在輸入列表中,這是因?yàn)樗话谙嗤慕M件內(nèi)(雖然是不同的模塊)。這將在下面的表3中示出。表3在步驟714,既包含在輸出符號列表又包含在輸入符號列表的所有符號被識別,而且在步驟716,所識別的符號和它們相應(yīng)的地址被放在跳轉(zhuǎn)表中。因此,該跳轉(zhuǎn)表僅包含相應(yīng)于輸入符號的每個(gè)輸出符號的引用。僅是對調(diào)用組件以外的符號的調(diào)用具有跳轉(zhuǎn)表中的引用。例如,對于調(diào)用組件以外的符號的調(diào)用參考不引用包含在組件本身內(nèi)的符號的任何調(diào)用。雖然func1和func3都可從組件A以外訪問,但是在當(dāng)前的程序中僅是func1將會(huì)被調(diào)用,因?yàn)闆]有其它的組件需要調(diào)用func3。因此,func3將不會(huì)被放置在跳轉(zhuǎn)表中。函數(shù)func4和Z也會(huì)被放置在跳轉(zhuǎn)表中因?yàn)樗鼈兌急煌獠拷M件調(diào)用。這將在下面的表4中示出。表4在步驟718,方法700變更組件間的所有直接引用而指向跳轉(zhuǎn)表。例如,相對于func4和Z的組件A中的所有引用將被修改指向跳轉(zhuǎn)表而不是直接指到組件B,以及相對于func1的組件B中的所有引用將被修改指向跳轉(zhuǎn)表而不是直接指到組件A。因此,導(dǎo)致func1、func4或Z的不同地址的映像的改變可通過修改跳轉(zhuǎn)表中相應(yīng)的間接地址被修改而不是需要修改調(diào)用組件中的每個(gè)直接引用。在步驟720,鏈接器(例如圖6的鏈接器610)被調(diào)用來鏈接最終映像。該最終映像將包括被修改過的組件以及跳轉(zhuǎn)表。一旦完成,該映像將被傳遞到無線裝置。另外參考圖8A,在本實(shí)例中,單個(gè)映像800包括組件A(由參考標(biāo)記802表示)以及組件B(由參考標(biāo)記804表示)。組件A與鄰近的存儲(chǔ)器空間806相關(guān),組件B與鄰近的存儲(chǔ)器空間808相關(guān)。存儲(chǔ)器空間806和808將一些鄰近的擴(kuò)展空間提供給它們相應(yīng)的組件。存在有相對于整體映像800的單個(gè)跳轉(zhuǎn)表810,或可以使用多個(gè)跳轉(zhuǎn)表(如圖8B中的跳轉(zhuǎn)表810和812所示)。例如,在一些實(shí)施例中,小的跳轉(zhuǎn)表會(huì)需要更小的空間,這是因?yàn)樗軌蛱峁┫鄳?yīng)于符號的位置的地址以及單獨(dú)指令的轉(zhuǎn)移指令。相反的,大的跳轉(zhuǎn)表可能需要分離的裝載地址以及轉(zhuǎn)移指令。如果使用較小的跳轉(zhuǎn)表,應(yīng)該理解,包含在每個(gè)表中的符號可被分離以便特定的組件僅需采用一個(gè)或兩個(gè)跳轉(zhuǎn)表。然而,可以采用符號和跳轉(zhuǎn)表的任何組合。為了示例的目的,映像本身可以大約是二十二兆字節(jié)(MB),雖然應(yīng)該理解,可以采用任何尺寸的映像。每個(gè)跳轉(zhuǎn)表(假設(shè)每個(gè)組件都有跳轉(zhuǎn)表)可以大約是四千字節(jié)(KB)??捎么鎯?chǔ)器空間806和808的大小可以大約是四到十六KB并可以位于包含一個(gè)或多個(gè)組件的每個(gè)四MB空間之后。剩余的存儲(chǔ)器可以構(gòu)成大約兩百和五十KB以及八百KB之間的鄰近的存儲(chǔ)器空間。應(yīng)該理解,這些值僅為了示例的目的,而映像、跳轉(zhuǎn)表、可用存儲(chǔ)器空間和剩余的存儲(chǔ)器的大小可以是任何希望的大小。參考圖9,在另一個(gè)實(shí)施例中,方法900可被用在映像補(bǔ)丁中以執(zhí)行諸如先前采用重定向機(jī)制創(chuàng)建并且被存儲(chǔ)在無線裝置上的現(xiàn)有映像的更新之類的行為。方法900例如可以在圖1的映像創(chuàng)建系統(tǒng)102上被執(zhí)行。在步驟902,方法900確定現(xiàn)有映像和新映像間的映像增量來識別兩個(gè)映像間的差別。在步驟904,對包含在映像的重定向機(jī)制中的任何符號的地址的任何改變都基于映像增量被識別。在步驟906,重定向機(jī)制中的地址被更新來反映被識別的改變。在步驟908,任何組件和重定向機(jī)制更新被傳遞到無線裝置。根據(jù)本發(fā)明,當(dāng)在無線裝置中使用的映像被更新時(shí),可以通過經(jīng)由補(bǔ)丁最小化模塊來最小化補(bǔ)丁大小以最小化更新的影響。雖然在上文中僅詳細(xì)描述了本發(fā)明的幾個(gè)示例性實(shí)施例,但是本領(lǐng)域技術(shù)人員很容易想到在本質(zhì)上不脫離本發(fā)明的新穎性教導(dǎo)和本發(fā)明的優(yōu)點(diǎn)的情況下可以對示例性實(shí)施例做出任何的修改。并且,與一些實(shí)施例相關(guān)的上文描述和討論的特征可以和與其它實(shí)施例相關(guān)的上文中描述和討論的特征相結(jié)合。因此,所有這樣的修改都傾向于包括在本發(fā)明的范圍內(nèi)。權(quán)利要求1.一種用于提供在無線裝置中使用的整體映像的方法,該方法包括識別形成用機(jī)器代碼表示的映像的多個(gè)組件;對于多個(gè)組件中的每個(gè)組件,建造包含有其它組件可訪問的該組件內(nèi)所有符號的輸出符號列表和包含有該組件所需要的其它組件內(nèi)所有符號的輸入符號列表;建造包含有對在每個(gè)組件的輸出符號列表中的每個(gè)符號的、在至少一個(gè)其他組件的輸入符號列表中的間接引用的重定向機(jī)制;對于多個(gè)組件中的每個(gè)組件,改變對另一個(gè)組件中的符號的每個(gè)直接引用來引用與重定向機(jī)制中的符號相關(guān)聯(lián)的間接引用,其中組件內(nèi)的引用不被改變;和創(chuàng)建包含有已改變的組件和重定向機(jī)制的最終映像。2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括在用來識別多個(gè)組件的組件描述文件中為組件定義至少一個(gè)準(zhǔn)則。3.根據(jù)權(quán)利要求2所述的方法,進(jìn)一步包括確定用來識別多個(gè)組件的組件描述文件是否存在。4.根據(jù)權(quán)利要求3所述的方法,進(jìn)一步包括如果不存在組件描述文件,則使用至少一個(gè)默認(rèn)組件定義來識別多個(gè)組件。5.根據(jù)權(quán)利要求1所述的方法,其中建造重定向機(jī)制包括創(chuàng)建至少一個(gè)跳轉(zhuǎn)表。6.根據(jù)權(quán)利要求1所述的方法,其中建造重定向機(jī)制包括創(chuàng)建至少一個(gè)鑲面。7.根據(jù)權(quán)利要求1所述的方法,其中以機(jī)器代碼表示的映像直接從匯編器接收,以及其中最終映像通過調(diào)用通常被匯編器直接調(diào)用的鏈接器來創(chuàng)建。8.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括采用無線固件過程傳遞映像到無線裝置。9.一種用于提供在無線裝置中使用的整體映像的方法,該方法包括從匯編器接收映像;識別形成映像的多個(gè)組件;從每個(gè)組件中識別可輸出的所有符號以及從另一個(gè)組件中識別被每個(gè)組件輸入的所有符號;建造包含有由一個(gè)組件輸出而被另一個(gè)組件輸入的每個(gè)符號的地址的重定向機(jī)制;修改每個(gè)組件來改變對與另一個(gè)組件相關(guān)聯(lián)的符號的每個(gè)直接引用為對重定向機(jī)制的引用;以及調(diào)用鏈接器來基于修改后的組件鏈接最終映像。10.根據(jù)權(quán)利要求9所述的方法,其中識別多個(gè)組件使用包含在由用戶準(zhǔn)備的組件描述文件中的至少一個(gè)組件定義。11.根據(jù)權(quán)利要求9所述的方法,其中識別多個(gè)組件使用包含在默認(rèn)描述文件中的至少一個(gè)組件定義。12.根據(jù)權(quán)利要求9所述的方法,其中符號是變量或函數(shù)。13.根據(jù)權(quán)利要求9所述的方法,其中多個(gè)組件中的至少一個(gè)包括多個(gè)模塊,該方法進(jìn)一步包括對多個(gè)模塊進(jìn)行分組從而形成組件。14.一種用于提供在無線裝置使用的整體映像的方法,該方法包括從形成以機(jī)器語言代碼接收的映像的多個(gè)模塊中建造至少第一和第二組件;為第一和第二個(gè)組件的每一個(gè)建造輸出符號列表和輸入符號列表;將第一組件的輸出符號列表與第二組件的輸入符號列表相比較,并且將第二組件的輸出符號列表與第一組件的輸入符號列表相比較,來識別第一和第二組件中的一個(gè)的輸出列表以及第一和第二組件中的另一個(gè)的輸入列表上的任何符號;建造包含有每個(gè)被識別的符號的位置的重定向機(jī)制;以及修改第一組件來將對第二個(gè)組件的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用,以及修改第二個(gè)組件來將對第一個(gè)組件的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用。15.根據(jù)權(quán)利要求14所述的方法,進(jìn)一步包括調(diào)用鏈接器以基于修改后的組件和重定向機(jī)制創(chuàng)建可執(zhí)行映像。16.根據(jù)權(quán)利要求14所述的方法,進(jìn)一步包括基于預(yù)定的一組組件定義來組織多個(gè)模塊成為第一和第二個(gè)組件。17.一種用于提供在無線裝置中使用的整體映像的系統(tǒng),該系統(tǒng)包括處理器;與處理器相耦合的存儲(chǔ)器單元;以及多個(gè)存儲(chǔ)在存儲(chǔ)器中,由處理器執(zhí)行的指令,該指令包括用于完成以下功能的指令將用于無線裝置的整體映像從匯編代碼轉(zhuǎn)換為機(jī)器代碼;基于用機(jī)器代碼所識別的模塊建造多個(gè)組件;識別每個(gè)組件可輸出的每個(gè)符號和每個(gè)組件輸入的每個(gè)符號;建造包含有可由一個(gè)組件輸出的、由另一個(gè)組件輸入的每個(gè)符號的重定向機(jī)制;修改每個(gè)組件將對與另一個(gè)組件相關(guān)聯(lián)的輸出符號的每個(gè)引用改變?yōu)閷χ囟ㄏ驒C(jī)制的引用;以及鏈接已修改的組件和重定向機(jī)制來創(chuàng)建整體映像的最終版本。18.根據(jù)權(quán)利要求17所述的系統(tǒng),進(jìn)一步包括傳遞整體映像的最終版本到無線設(shè)備的裝置。全文摘要本發(fā)明一般來說涉及提供在無線裝置中使用的整體映像的系統(tǒng)和方法。該方法包括識別形成映像的多個(gè)組件,識別可以從每個(gè)組件輸出的所有符號和從另一個(gè)組件中由每個(gè)組件輸入的所有符號。重定向機(jī)制被建造,其包含有由一個(gè)組件輸出的而由令一個(gè)組件輸入的每個(gè)符號的地址,以及每個(gè)組件被修改來改變相對于與另一個(gè)組件相關(guān)的符號的每個(gè)直接引用為相對于重定向機(jī)制的引用。鏈接器被調(diào)用以基于修改的組件來鏈接最終映像。文檔編號G06F9/445GK101026826SQ20061006447公開日2007年8月29日申請日期2006年12月1日優(yōu)先權(quán)日2005年12月1日發(fā)明者范國新,瓦尼·布達(dá)蒂,羅杰·英格爾斯申請人:三星電子株式會(huì)社