專利名稱:產(chǎn)生、鏈接和更新基于組件的軟件的方法和其上記錄有這種軟件的信息存儲(chǔ)介質(zhì)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件的組件化,更具體地講,涉及以多個(gè)二進(jìn)制鏡像產(chǎn)生基 于組件的軟件、鏈接基于組件的軟件和更新基于組件的軟件的方法和其上記 錄有軟件的信息存儲(chǔ)介質(zhì)。
背景技術(shù):
在消費(fèi)類電子(CE)裝置中嵌入有提供各種支持功能的各種軟件。由于 CE裝置具有有限的存儲(chǔ)容量,所以必須開發(fā)存儲(chǔ)容量小的軟件。由于必須更 新軟件以進(jìn)行糾錯(cuò)或者改進(jìn)功能,所以設(shè)計(jì)軟件以被升級(jí)。因此,正在積極 進(jìn)行研究尋找有效升級(jí)軟件的方法。有兩種軟件更新方法。 一種是將軟件劃 分成多個(gè)組件并對(duì)組件進(jìn)行更新。另 一種方法是以二進(jìn)制鏡像來(lái)改變軟件并 對(duì)二進(jìn)制鏡像進(jìn)行更新。
圖1是傳統(tǒng)的基于組件的軟件的框圖。參照?qǐng)D1,操作系統(tǒng)(OS) 110 和三個(gè)組件120、 130和140彼此分開并被存儲(chǔ)在閃存中。當(dāng)啟動(dòng)系統(tǒng)時(shí), OS 110被加載到RAM,并且需要OS 110的組件120、 130和140被加載到 RAM。由于組件120、 130和140的地址彼此沒有《連接,所以組件120、 130 和140中的每個(gè)組件在頭125中存儲(chǔ)鏈接信息。在LINUX系統(tǒng)或VxWorks 系統(tǒng)中使用可執(zhí)行和可鏈接的格式(ELF)存儲(chǔ)鏈接信息。在組件120、 130 和140中的每個(gè)組件被加載到RAM時(shí)使用鏈接信息,從而組件120、130和 140中的每個(gè)組件可被鏈接到組件120、 130和140中的每個(gè)組件所參考的其 他組件的RAM的物理地址。
因此,這種結(jié)構(gòu)的優(yōu)點(diǎn)在于由于可對(duì)組件120、 130和140中的每個(gè)組 件容易地進(jìn)行管理,并且所述每個(gè)組件是獨(dú)立的,所以組件120、 130和140 中的一個(gè)組件的改變不會(huì)影響其他組件。也可有效地更新軟件。例如,當(dāng)?shù)?三組件140被更新時(shí),從服務(wù)器下載第三組件140的新版本組件150,并用 該新版本組件150代換現(xiàn)有版本的第三組件140。因?yàn)闇p小了軟件更新服務(wù)
器的負(fù)荷,并且不更新全部的軟件鏡像,所以可有效更新軟件。
然而,這種結(jié)構(gòu)的缺點(diǎn)在于組件120、 130和140中的每個(gè)組件的文件 大小增加。詳細(xì)地講,由于沒有鏈接組件120、 130和140的地址,所以必須 在組件120、 130和140中的每個(gè)組件的文件的頭中記錄組件120、 130和140 中的每個(gè)組件的鏈接信息,這將文件的大小增加三倍或者四倍。文件大小增 加的原因在于組件120、 130和140中的每個(gè)組件必須將關(guān)于組件120、 130 和140的哪一部分使用導(dǎo)出和導(dǎo)入符號(hào)的信息包括在組件120、 130和140中 的每個(gè)組件的頭中。因此,這種結(jié)構(gòu)被廣泛地用于不限制存儲(chǔ)空間的系統(tǒng), 然而,不可能將這種結(jié)構(gòu)應(yīng)用于具有有限存儲(chǔ)空間的CE裝置。此外,由于 在編譯和運(yùn)行時(shí)這種結(jié)構(gòu)花費(fèi)很多時(shí)間來(lái)進(jìn)行鏈接,所以更難將這種結(jié)構(gòu)應(yīng) 用于CE裝置。
因此,大多數(shù)CE裝置將包括OS 110的所有軟件合成為大的二進(jìn)制鏡像, 例如EXE、 BIN,并將所述二進(jìn)制鏡像存儲(chǔ)在閃存中。在這種情況下,盡管 可減小二進(jìn)制鏡像的大小,但是必須整個(gè)更新現(xiàn)有二進(jìn)制鏡像以允許軟件版 本升級(jí)。
圖2是作為二進(jìn)制鏡像分配的傳統(tǒng)軟件的框圖。參照?qǐng)D2,合成OS和三 個(gè)組件的文件210被存儲(chǔ)在閃存中。當(dāng)啟動(dòng)系統(tǒng)時(shí),文件210被加載到RAM 。 因?yàn)橄蛉齻€(gè)組件中的每個(gè)組件的符號(hào)指定了靜態(tài)地址,并且將這些組件作為 二進(jìn)制鏡像210存儲(chǔ),所以這種結(jié)構(gòu)不需要符號(hào)表或頭信息。因此,由于可 以將二進(jìn)制鏡像的大小最小化,所以這種結(jié)構(gòu)適合于具有有限存儲(chǔ)空間的CE 裝置。
為了更新以二進(jìn)制鏡像210的狀態(tài)存儲(chǔ)的軟件,從服務(wù)器下載新二進(jìn)制 鏡像220,并代換現(xiàn)有版本文件210。然而,每個(gè)組件中的某部分的改變需要 更新整個(gè)二進(jìn)制鏡像。由于不包括符號(hào)表或者頭信息以減小二進(jìn)制鏡像的大 小,所以所有符號(hào)被鏈接到靜態(tài)地址。由于使用了靜態(tài)地址來(lái)將組件彼此鏈 接,所以二進(jìn)制鏡像中的小改變也引起文件的大改變。因此,由于從軟件更 新服務(wù)器下載整個(gè)文件,并且現(xiàn)有二進(jìn)制鏡像210作為文件的安全備份被備 份,所以閃存空間必須是二進(jìn)制鏡像大小的兩倍。
發(fā)明內(nèi)容
技術(shù)方案
本發(fā)明提供了 一種在占用較小存儲(chǔ)空間的同時(shí)有效地構(gòu)建基于組件的軟 件的方法。
本發(fā)明還提供一種更新和鏈接基于組件的軟件以使發(fā)送的數(shù)據(jù)量、所使 用的閃存量和使用閃存所需要的時(shí)間最小化的方法。
技術(shù)效果
根據(jù)本發(fā)明,減小了由于用于將二進(jìn)制鏡像軟件轉(zhuǎn)換成基于組件的軟件 的符號(hào)信息引起增加的文件大小。
此外,由于二進(jìn)制鏡像軟件被劃分成若千個(gè)組件,所以只需要更新改變 的組件以升級(jí)軟件,從而減小了從服務(wù)器下載的數(shù)據(jù)量,很大程度上減小了 安全更新的備份文件的大小,并提高了更新速度,從而可有效地更新軟件。
盡管已經(jīng)參照本發(fā)明示例性實(shí)施例具體顯示和描述了本發(fā)明,但是本領(lǐng) 域的技術(shù)人員應(yīng)該理解,在不脫離權(quán)利要求所限定的本發(fā)明的精神和范圍的 情況下,可在形式和細(xì)節(jié)上進(jìn)行各種改變。示例性實(shí)施例應(yīng)該被認(rèn)為只是為 了描述的意義,而不是為了限制的目的。因此,本發(fā)明的范圍不由本發(fā)明的 詳細(xì)描述來(lái)限定,而是由權(quán)利要求限定,并且,落入所述范圍內(nèi)的所有不同 被認(rèn)為是包括在本發(fā)明中。
通過參照附圖對(duì)本發(fā)明示例性實(shí)施例的詳細(xì)描述,本發(fā)明的上述和其他
特征和優(yōu)點(diǎn)將會(huì)更清楚,其中
圖1是傳統(tǒng)的基于組件的軟件的框圖2是作為二進(jìn)制鏡像分配的傳統(tǒng)軟件的框圖3是根據(jù)本發(fā)明實(shí)施例的基于組件的軟件的框圖4是根據(jù)本發(fā)明實(shí)施例的包括基于組件的軟件的閃存的框圖5是加載圖4的軟件的RAM的框圖6是用于調(diào)用圖5所示的第一組件中的函數(shù)的代碼的示圖7是根據(jù)本發(fā)明另 一實(shí)施例的基于組件的軟件的框圖8是包括圖7所示的基于組件的軟件的閃存的框圖9是加載圖8所示的軟件的RAM的框圖10是根據(jù)本發(fā)明實(shí)施例的符號(hào)表的內(nèi)容的示圖ll是通過更新圖1O所示的符號(hào)表獲得的符號(hào)表的內(nèi)容的示圖12是用于調(diào)用在圖9所示的第二組件中的函數(shù)的代碼的示圖13是用于解釋傳統(tǒng)函數(shù)調(diào)用原理的示圖14是根據(jù)本發(fā)明實(shí)施例的解釋間接函數(shù)調(diào)用原理的示圖15是根據(jù)本發(fā)明實(shí)施例的軟件安排方法的流程圖16是根據(jù)本發(fā)明實(shí)施例的編譯和鏈接基于組件的軟件的方法的流程圖17是根據(jù)本發(fā)明實(shí)施例的基于組件的軟件更新方法的流程圖。
最佳方式
根據(jù)本發(fā)明的一方面,提供了一種記錄有基于組件的軟件的信息存儲(chǔ)介質(zhì),包括至少一個(gè)軟件組件;符號(hào)表,記錄有所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息;存儲(chǔ)器映射信息,記錄有加載所述至少一個(gè)軟件組件和符號(hào)表的存儲(chǔ)器地址信息。
存儲(chǔ)器映射信息還可包括加載操作系統(tǒng)(OS)的存儲(chǔ)器地址信息。
所述介質(zhì)還可包括符號(hào)查詢函數(shù),所述符號(hào)查詢函數(shù);故所述至少一個(gè)軟件組件調(diào)用,并通過詢問符號(hào)表輸出輸入符號(hào)的存取信息。
輸入符號(hào)的存取信息可包括符號(hào)表中的輸入符號(hào)的地址或在所述至少一個(gè)軟件組件或OS中的輸入符號(hào)的物理地址。
所述至少一個(gè)軟件組件可包括參考符號(hào)表以獲取OS和其他軟件組件提供的符號(hào)的物理地址的代碼。
根據(jù)本發(fā)明的一方面,提供了一種軟件安排方法,包括產(chǎn)生至少一個(gè)軟件組件;產(chǎn)生記錄有所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息的符號(hào)表;產(chǎn)生記錄有加載OS、所述至少一個(gè)軟件組件和符號(hào)表的存儲(chǔ)器地址信息的存儲(chǔ)器映射信息。
根據(jù)本發(fā)明的一方面,提供了一種基于存儲(chǔ)器映射信息和符號(hào)表來(lái)鏈接包括至少一個(gè)軟件組件的軟件的方法,其中,所述存儲(chǔ)器映射信息中記錄有加載所述至少一個(gè)組件的存儲(chǔ)器地址信息,所述符號(hào)表中記錄有加載所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息。
根據(jù)本發(fā)明的一方面,提供了一種更新包括至少一個(gè)軟件組件的軟件的方法,其中,所述至少一個(gè)軟件組件基于存儲(chǔ)器映射信息和符號(hào)表被鏈接,所述存儲(chǔ)器映射信息中記錄有加載每個(gè)組件的存儲(chǔ)器地址信息,所述符號(hào)表 中記錄有關(guān)于所述至少 一個(gè)軟件組件所使用的符號(hào)的地址信息,所述方法包
括更新所述至少一個(gè)軟件組件中將被更新的軟件組件;更新符號(hào)表以反映 更新的軟件組件的改變的內(nèi)容。
在下面的描述中將部分地闡述本發(fā)明的另外方面,部分地,本發(fā)明的另 外方面將會(huì)從下面的描述中變得清楚,或者通過實(shí)施本發(fā)明而被了解。可借 助元素和各種元素的結(jié)合來(lái)實(shí)現(xiàn)和獲得本發(fā)明的各方面,并且在下面的詳細(xì) 描述和權(quán)利要求中具體闡述本發(fā)明的各方面。
應(yīng)該理解,前面和后面的描述只是示例性和解釋性的,并不意圖以任何 方式來(lái)限制要求保護(hù)的本發(fā)明或其應(yīng)用。
發(fā)明的方式
將參照附圖來(lái)更全面地描述本發(fā)明,其中,在附圖中示出了本發(fā)明的示
例性實(shí)施例。
圖3是根據(jù)本發(fā)明實(shí)施例的基于組件的軟件的框圖。在當(dāng)前實(shí)施例中, 作為指定接口的符號(hào)查詢函數(shù)320被用于提供獨(dú)立的軟件組件340-1至340-N 中的每個(gè)組件。
參照?qǐng)D3,本發(fā)明當(dāng)前實(shí)施例的軟件被劃分成操作系統(tǒng)(OS,未示出) 和多個(gè)軟件組件340-1至340-N。 OS可實(shí)現(xiàn)為軟件組件340-1至340-N中的 一個(gè)或多個(gè)組件。與傳統(tǒng)技術(shù)不同,軟件組件340-1至340-N中的每個(gè)組件 不包括用于鏈接的頭信息,而是已使用存儲(chǔ)器映射信息310被鏈接。由于先 前已經(jīng)鏈接了軟件組件340-1至340-N,所以它們不需要頭信息,而是使用與 傳統(tǒng)地以二進(jìn)制鏡像實(shí)現(xiàn)的軟件的存儲(chǔ)空間相似的存儲(chǔ)空間。
本發(fā)明當(dāng)前實(shí)施例的軟件包括符號(hào)表330和存儲(chǔ)器映射信息310,所述 符號(hào)表330用于記錄由軟件組件340-1至340-N中的每個(gè)組件使用的符號(hào)的 地址信息,所述存儲(chǔ)器映射信息310用于記錄加載軟件組件340-1至340-N 和符號(hào)表330的RAM的地址信息。存儲(chǔ)器映射信息310還包括加載OS和符 號(hào)查詢函數(shù)320的RAM的存儲(chǔ)器地址。存儲(chǔ)器映射信息310被用于鏈接軟 件并將軟件加載到RAM。
如上所述,本發(fā)明當(dāng)前實(shí)施例的軟件還包括查找由軟件組件340-1至 340-N中的每個(gè)組件提供的符號(hào)(函數(shù)和全局變量等)的符號(hào)查詢函數(shù)320。符號(hào)查詢函數(shù)320,作為被軟件組件340-1至340-N調(diào)用的公共接口 ,查詢符 號(hào)表330并輸出比如將被軟件組件340-1至340-N中的每個(gè)組件使用的符號(hào) 的地址的存取信息。軟件組件340-1至340-N中每個(gè)組件的二進(jìn)制鏡像使用 加載符號(hào)查詢函數(shù)320的地址來(lái)調(diào)用符號(hào)查詢函數(shù)320。符號(hào)查詢函數(shù)320 返回符號(hào)表330中的輸入符號(hào)的地址或在軟件組件340-1至340-N或OS中的 輸入符號(hào)的物理地址。調(diào)用符號(hào)查詢函數(shù)320的軟件組件340-1至340-N基 于返回的信息使用期望的符號(hào)。
圖4是根據(jù)本發(fā)明實(shí)施例的包括基于組件的軟件的閃存的框圖。參照?qǐng)D 4,三個(gè)先前鏈接的軟件組件440、 450和460被安裝在閃存中。所述閃存還 包括存儲(chǔ)器映射信息410、符號(hào)查詢函數(shù)420和符號(hào)表430,它們與OS 400 分離。然而,存儲(chǔ)器映射信息410、符號(hào)查詢函數(shù)420和符號(hào)表430可被包 括在OS 400中。
圖5是加載圖4所示的軟件的RAM的框圖。參照?qǐng)D5,基于存儲(chǔ)器映射 信息410將每個(gè)組成部分加載到指定的存儲(chǔ)器空間。
由于基于在存儲(chǔ)器映射信息410中指定的地址來(lái)映射和鏈接三個(gè)軟件組 件440、 450和460,所以如果它們被加載到具有不同基本地址的存儲(chǔ)器空間, 則發(fā)生錯(cuò)誤。從地址0開始加載符號(hào)查詢函數(shù)420和符號(hào)表430,從地址100 開始加載OS 400,從地址300開始加載第一組件440,從地址400開始加載 第二組件450, ^v地址500開始加載第三組件460。
本發(fā)明的基于組件的軟件不被動(dòng)態(tài)地鏈接,而在它被加載到RAM之前 被鏈接。當(dāng)軟件組件440、 450和460中的一個(gè)組件直4妻參考另 一軟件組件的 函數(shù)地址時(shí),如果由于另一組件的校正而引起函數(shù)地址改變,則需要修改參 考另 一組件的軟件組件。因此,軟件組件440、 450和460中的每個(gè)組件使用 作為指定的接口的符號(hào)查詢函數(shù)420來(lái)進(jìn)行通信,因此可對(duì)它們進(jìn)行獨(dú)立的 管理。由于軟件組件440、 450和460中的每個(gè)組件通過指定的接口 420使用 另 一軟件組件的函數(shù)地址,所以另 一軟件組件的函數(shù)地址的改變不影響參考 另一軟件組件的軟件組件。
圖6是用于調(diào)用圖5所示的第一組件440中的函數(shù)的代碼的示圖。
傳統(tǒng)技術(shù)通過使用比如"mallocl00"的指令來(lái)調(diào)用函數(shù)以調(diào)用用于存儲(chǔ) 器分配的函數(shù)(malloc)。然而,參照?qǐng)D6,在本發(fā)明的當(dāng)前實(shí)施例中,首先, 代碼調(diào)用作為符號(hào)查詢函數(shù)的QuerySymbol,接收關(guān)于函數(shù)malloc的函數(shù)指針610,并使用返回的函數(shù)指針620來(lái)調(diào)用malloc。
所述方法引起組件之間的獨(dú)立性,這可從使用匯編語(yǔ)言提供的代碼得到 確認(rèn)。匯編代碼630和640對(duì)應(yīng)于函數(shù)調(diào)用610和620。"調(diào)用"指令字用于 調(diào)用存儲(chǔ)在相關(guān)地址中的函數(shù)。從相關(guān)地址執(zhí)行函數(shù)所需的指令字例程被包 括在代碼中。
第一調(diào)用指令字630使用絕對(duì)值地址0x0來(lái)調(diào)用QuerySymbol。第二調(diào) 用指令字640使用計(jì)算的地址[RegX]來(lái)調(diào)用作為另 一組件的函數(shù)的malloc。 如果將作為符號(hào)查詢函數(shù)的QuerySymbol的地址指定為靜態(tài)的,則由于第一 調(diào)用指令字630沒有改變,所以不必糾正參考另一組件的組件。[RegX]指示 包括在符號(hào)表中malloc的地址被包括在[RegX]中。然而,在本發(fā)明的另一實(shí) 施例中,第二調(diào)用指令字640可參考malloc的物理地址。此外,本發(fā)明的當(dāng) 前實(shí)施例描述由OS提供的函數(shù)malloc。然而,當(dāng)使用另一組件的函數(shù)時(shí), 根據(jù)相同的原理使用符號(hào)查詢函數(shù)來(lái)獲得期望的函數(shù)的存取信息,以使用期 望的函數(shù)。
圖7是根據(jù)本發(fā)明另一實(shí)施例的基于組件的軟件的框圖。參照?qǐng)D7,不 使用符號(hào)查詢函數(shù)并且修改鏈接程序,從而鏈接軟件組件730-1到730-N的 二進(jìn)制鏡像以包括參考符號(hào)表720的代碼,以獲取通過OS和其他軟件組件 提供的符號(hào)的物理地址。圖3所示的先前實(shí)施例的基于組件的軟件既包括調(diào) 用符號(hào)查詢函數(shù)的指令字,也包括調(diào)用將被使用以調(diào)用外部函數(shù)的函數(shù)的指 令字。
然而,與圖3所示的先前實(shí)施例不同,本發(fā)明當(dāng)前實(shí)施例的基于組件的 軟件不包括符號(hào)查詢函數(shù),而包括存儲(chǔ)器映射信息710、符號(hào)表720和一個(gè) 或者多個(gè)軟件組件730-1到730-N。與圖3所示的先前實(shí)施例相同,OS可被 實(shí)現(xiàn)為這些軟件組件730-1到730-N中的一個(gè)或者多個(gè)組件。
存儲(chǔ)器映射信息710包括關(guān)于加載符號(hào)表720、 OS和軟件組件730-1 到730-N中的每個(gè)組件的RAM的地址信息,并一皮用于鏈4妄OS和軟件組件 730-1到730-N中的每個(gè)組件并將OS和軟件組件730-1到730-N中的每個(gè)組 件加載到RAM。當(dāng)鏈接軟件組件730-1到730-N中的每個(gè)組件時(shí),基于當(dāng)前 執(zhí)行的指令字的地址和符號(hào)表720的符號(hào)地址信息指定物理地址。因此,當(dāng) 前執(zhí)行的指令字的地址和符號(hào)表720的符號(hào)地址信息是執(zhí)行軟件組件730-1 到730-N的每個(gè)指令字的重要信息。存儲(chǔ)器映射信息710被用于指定軟件組件730-1到730-N中的每個(gè)組件的基本地址。
符號(hào)表720存儲(chǔ)軟件組件730-1到730-N中的每個(gè)組件使用的符號(hào)的地 址信息。通過使用在符號(hào)表720中指定的地址來(lái)將軟件組件730-1到730-N 中的每個(gè)組件使用的函^:和變量與軟件組件鏈接。例如,當(dāng)^吏用函數(shù)prmtf 時(shí),傳統(tǒng)鏈接方法直接將以函數(shù)printf開始的地址和使用函數(shù)pnntf的軟件組 件相鏈接。然而,在本發(fā)明當(dāng)前實(shí)施例中,將記錄有函數(shù)printf的地址的符 號(hào)表720的地址與使用函數(shù)printf的軟件組件相鏈接。因此,當(dāng)更新軟件組 件730-1到730-N中的每個(gè)組件時(shí),必須同時(shí)更新存儲(chǔ)在閃存中的符號(hào)表720。 符號(hào)表720必須被更新以支持動(dòng)態(tài)加載。
圖8是包括圖7所示的基于組件的軟件的閃存的框圖。參照?qǐng)D8,三個(gè) 先前鏈接的軟件組件830、 840和850被安裝在閃存中。閃存還包括存儲(chǔ)器映 射信息810和符號(hào)表820,它們與OS 800分離。然而,存儲(chǔ)器映射信息810 和符號(hào)表820可被包括在OS 800中。
圖9是加載圖8的軟件的RAM的框圖。參照?qǐng)D9,基于存儲(chǔ)器映射信息 810,每一組成部分被加載到指定的存儲(chǔ)器空間。
從地址0開始加載符號(hào)查詢函數(shù)820,從地址300開始加載OS 800,從 地址600開始加載第一組件830,從地址1000開始加載第二組件840,從地 址1500開始加載第三組件850。
圖10是根據(jù)本發(fā)明實(shí)施例的符號(hào)表1010的內(nèi)容的示圖。參照?qǐng)D10,符 號(hào)表1010包括每個(gè)符號(hào)的地址值。例如,符號(hào)表1010顯示函數(shù)printf從地 址0x0640 ( 1012)開始,函數(shù)strlen從地址0x0920 ( 1014)開始。在本發(fā)明 當(dāng)前實(shí)施例中,由于不使用動(dòng)態(tài)鏈接方法,而是先前鏈接有關(guān)地址,所以符 號(hào)名稱被用作參考而不需要被存儲(chǔ)在符號(hào)表1010中。下面部分1020被表示 為符號(hào)表1010的二進(jìn)制格式。在下面部分1020中,每個(gè)符號(hào)的地址僅使用 4字節(jié)。
圖ll是通過更新圖10所示的符號(hào)表獲得的符號(hào)表1110的內(nèi)容的示圖。 參照?qǐng)D11,由于提供這些函數(shù)的OS被更新,所以函數(shù)printf的開始地址被 改變成0x0700 ( 1112 ),函數(shù)strlen開始的地址被改變成0x0980 ( 1114 )。與 圖10所示的符號(hào)表1010相同,下面部分1120被表示為符號(hào)表1110的二進(jìn)制格式。
圖12是用于調(diào)用在圖9所示的第二組件840中的函數(shù)的代碼的示圖。參
照?qǐng)D12,與圖6所示的代碼不同,匯編代碼不需要調(diào)用符號(hào)查詢函數(shù)的指令
字。調(diào)用函數(shù)prmtf的指令字被編譯并被鏈接到由記錄有函數(shù)printf的開始地 址的符號(hào)表的地址0x0000參考的匯編指令字1212。調(diào)用函數(shù)strlen的指令字 被編譯并被鏈接到由記錄有函數(shù)strlen的開始地址的符號(hào)表的地址0x0008參 考的匯編指令字1214。這些調(diào)用指令字1212和1214才喿作以通過符號(hào)表被重 定位到存儲(chǔ)函數(shù)printf和strlen的地址。具體地講,通過將所需函數(shù)的地址寫 到符號(hào)表,調(diào)用指令字使用間接尋址方法跳轉(zhuǎn)到函數(shù)prmtf和strlen。在這點(diǎn) 上,如果符號(hào)表的位置(地址)沒有改變,則使用符號(hào)的軟件組件不受影響, 只是通過更新軟件組件和包括符號(hào)的符號(hào)表來(lái)正確地完成符號(hào)鏈接。
盡管在提供函數(shù)printf和strlen的OS被更新之后,符號(hào)表1110的地址 值改變,但是不必更新使用函數(shù)printf和strlen的第二組件840。因?yàn)榉?hào)表 1110的地址沒有改變,所以使用記錄在符號(hào)表的地址0x0000的信息1112和 記錄在符號(hào)表的地址0x0008的信息1114來(lái)間接調(diào)用函數(shù),不必更新使用符 號(hào)的軟件組件。為此,符號(hào)表的地址不可改變,但是新符號(hào)被添加到符號(hào)表 的最后。如上所述,符號(hào)表必定總被加載到在存儲(chǔ)器映射信息中指定的地址。
圖13是解釋傳統(tǒng)函數(shù)調(diào)用原理的示圖。參照?qǐng)D13,傳統(tǒng)調(diào)用指令字1302 直接轉(zhuǎn)到包括函數(shù)printf的地址1304。
圖14是用于解釋根據(jù)本發(fā)明實(shí)施例的間接函數(shù)調(diào)用原理的示圖。參照?qǐng)D 14,在本發(fā)明的當(dāng)前實(shí)施例中使用記錄有函數(shù)的地址的符號(hào)表的地址。也就 是說,深度被增加。當(dāng)?shù)谝唤M件調(diào)用函數(shù)printf時(shí),第一組件被改變以具有 參考地址0x700的符號(hào)表項(xiàng)的指令字1402。由于符號(hào)表的地址0x700包括記 錄有OS的地址0x04bal8的項(xiàng)1406,所以"call
"調(diào)用以地址0x04bal8 開始的函ltprmtf ]408。
盡管在當(dāng)前實(shí)施例中描述了 OS提供的函數(shù),但是很顯然,以與當(dāng)前實(shí)施例中描述的方式相同的方式來(lái)使用由軟件組件提供的函數(shù)。
圖15,劃分軟件以產(chǎn)生至少一個(gè)軟件組件(操作1502)。在這點(diǎn)上,應(yīng)該理 解,相同的方法可被用于最初以組件形式編寫軟件的情況,在這種情況下, 可省略軟件劃分步驟。產(chǎn)生記錄有產(chǎn)生的軟件組件所使用的符號(hào)的地址信息 的符號(hào)表(操作1504)。產(chǎn)生記錄有加載OS、軟件組件和符號(hào)表的存儲(chǔ)器地 址信息的存儲(chǔ)器映射信息(操作1506)。
基于組件的軟件產(chǎn)生方法還可包括產(chǎn)生符號(hào)查詢函數(shù)的操作,所述符號(hào) 查詢函數(shù)被至少 一個(gè)軟件組件調(diào)用并通過詢問符號(hào)表輸出輸入的符號(hào)的存取 信息。符號(hào)存取信息可包括符號(hào)表中的輸入符號(hào)的地址或在軟件組件或OS 中的輸入符號(hào)的物理地址。根據(jù)本發(fā)明另一實(shí)施例,軟件組件可包括參考符 號(hào)表的代碼,以獲取OS和其他軟件組件提供的符號(hào)的物理地址。
圖16是根據(jù)本發(fā)明實(shí)施例的編譯和鏈接基于組件的軟件的方法的流程 圖。參照?qǐng)D16,編譯輸入的源代碼(操作1602和1604),然后進(jìn)行鏈接(操 作1606)?;诖鎯?chǔ)器映射信息和符號(hào)表,輸入源代碼的外部符號(hào)查詢代碼 被改變成基于符號(hào)表獲取符號(hào)的物理地址的間接尋址代碼,以執(zhí)行鏈接處理 (操作1606)。
圖17是根據(jù)本發(fā)明實(shí)施例的基于組件的軟件更新方法的流程圖。可獨(dú)立 地更新根據(jù)本發(fā)明的基于組件的軟件的每個(gè)軟件組件。因此,不更新整個(gè)軟 件鏡像,而只更新改變的組件和改變的符號(hào)表。
參照?qǐng)D17,不更新所有的軟件組件,而只更新將被改變和升級(jí)的軟件組件(操作1702)。更新符號(hào)表已反映更新的軟件組件的改變的內(nèi)容(操作1704)。如果改變了加載每個(gè)軟件組件的存儲(chǔ)器地址,則更新存儲(chǔ)器映射信息 (操作1706)。
當(dāng)使用間接方法來(lái)調(diào)用所有外部函數(shù)時(shí),必須考慮軟件性能方面的問題。 函數(shù)使用得越頻繁,問題變得越嚴(yán)重。盡管不頻繁調(diào)用外部組件函數(shù),但是 頻繁調(diào)用OS提供的函數(shù),這可能會(huì)影響軟件的性能。為了解決這個(gè)問題, 不能間接調(diào)用OS提供的函數(shù),而必須直接調(diào)用。如果間接調(diào)用OS提供的函 數(shù),則由于組件相互關(guān)聯(lián),所以不能校正OS提供的函數(shù),并且不能改變存 儲(chǔ)器映射信息中指定的OS的基本地址。
然而,實(shí)驗(yàn)顯示,本發(fā)明的間接調(diào)用方法沒有在很大程度上減小軟件的 性能。當(dāng)在VxWorks中執(zhí)行從具有1303個(gè)外部函數(shù)調(diào)用的軟件產(chǎn)生的二進(jìn) 制鏡像時(shí),二進(jìn)制鏡像的大小是974KB, 二進(jìn)制鏡像的平均動(dòng)作數(shù)是1594 (26.57秒)。同時(shí),當(dāng)具有1303個(gè)外部函數(shù)調(diào)用的軟件是根據(jù)本發(fā)明的基于 組件的,并且在相同的平臺(tái)VxWorks中執(zhí)行時(shí),二進(jìn)制鏡像的大小是978KB, 平均動(dòng)作數(shù)是1615 (26.9秒)。因此,根據(jù)本發(fā)明,需要與使用二進(jìn)制鏡像 產(chǎn)生的軟件的存儲(chǔ)器具有相似大小的存儲(chǔ)器,并且執(zhí)行速度也幾乎與二進(jìn)制 鏡像軟件的速度相同,并且可利用作為二進(jìn)制鏡像提供的軟件和基于組件的軟件的優(yōu)點(diǎn)。 -
本發(fā)明還可被實(shí)現(xiàn)為計(jì)算機(jī)可讀記錄介質(zhì)上的計(jì)算機(jī)可讀代碼'
權(quán)利要求
1、一種其上記錄有基于組件的軟件的信息存儲(chǔ)介質(zhì),包括至少一個(gè)軟件組件;符號(hào)表,記錄有所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息;存儲(chǔ)器映射信息,記錄有所述至少一個(gè)軟件組件和符號(hào)表的存儲(chǔ)器地址信息。
2、 如權(quán)利要求1所述的介質(zhì),其中,存儲(chǔ)器映射信息還包括操作系統(tǒng)(OS ) 的存儲(chǔ)器地址信息。
3、 如權(quán)利要求l所述的介質(zhì),還包括符號(hào)查詢函數(shù),當(dāng)所述符號(hào)查詢 函數(shù)被所述至少一個(gè)軟件組件調(diào)用時(shí),所述符號(hào)查詢函數(shù)詢問符號(hào)表并輸出 輸入符號(hào)的存取信息。
4、 如權(quán)利要求3所述的介質(zhì),其中,輸入符號(hào)的存取信息包括符號(hào)表中 的輸入符號(hào)的地址或在所述至少一個(gè)軟件組件或OS中的輸入符號(hào)的物理地 址。
5、 如權(quán)利要求l所述的介質(zhì),其中,所述至少一個(gè)軟件組件包括參考符 號(hào)表以獲取OS和其他軟件組件提供的符號(hào)的物理地址的代碼。
6、 一種處理軟件程序的方法,包括通過劃分軟件程序來(lái)產(chǎn)生至少 一個(gè)軟件組件;產(chǎn)生記錄有關(guān)于OS、所述至少一個(gè)軟件組件和符號(hào)表的存儲(chǔ)器地址信息的存儲(chǔ)器映射信息。
7、 如權(quán)利要求6所述的方法,還包括產(chǎn)生符號(hào)查詢函數(shù),當(dāng)所述符號(hào) 查詢函數(shù)被所述至少一個(gè)軟件組件調(diào)用時(shí),所述符號(hào)查詢函數(shù)詢問符號(hào)表并 輸出輸入符號(hào)的存取信息。
8、 如權(quán)利要求7所述的方法,其中,輸入符號(hào)的存取信息包括符號(hào)表中 的輸入符號(hào)的地址或在所述至少一個(gè)軟件組件或OS中的輸入符號(hào)的物理地 址。
9、 如權(quán)利要求6所述的方法,其中,所述至少一個(gè)軟件組件包括參考符 號(hào)表以獲取OS和其他軟件組件提供的符號(hào)的物理地址的代碼。
10、 一種鏈接包括至少一個(gè)軟件組件的軟件的方法,包括提供存儲(chǔ)器映射;將關(guān)于至少一個(gè)軟件組件的存儲(chǔ)器地址信息記錄在存儲(chǔ)器映射中; 提供符號(hào)表;將所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息記錄在符號(hào)表中。
11、 如權(quán)利要求IO所述的方法,其中,基于符號(hào)表將所述至少一個(gè)軟件 組件的符號(hào)查詢代碼改變?yōu)楂@取符號(hào)的物理地址的代碼。
12、 一種其上記錄有用于執(zhí)行鏈接包括至少一個(gè)軟件組件的軟件的方法 的計(jì)算機(jī)程序的計(jì)算機(jī)可讀記錄介質(zhì),所述程序使計(jì)算機(jī)執(zhí)行下述步驟產(chǎn)生存儲(chǔ)器映射;將存儲(chǔ)器地址信息存儲(chǔ)在存儲(chǔ)器映射中; 產(chǎn)生符號(hào)表;其中,基于所述符號(hào)表將所述至少一個(gè)軟件組件的符號(hào)查詢代碼改變成 獲取符號(hào)的物理地址的代碼。
13、 一種更新包括至少一個(gè)軟件組件的軟件的方法,其中,所述至少一 個(gè)軟件組件基于存儲(chǔ)器映射信息和符號(hào)表被鏈接,所述存儲(chǔ)器映射信息中記 錄有指示每個(gè)組件被加載的位置的存儲(chǔ)器地址信息,所述符號(hào)表中記錄有關(guān) 于所述至少一個(gè)軟件組件所使用的符號(hào)的地址信息,所述方法包括更新所述至少 一個(gè)軟件組件中將被更新的軟件組件;
14、 如權(quán)利要求13所述的方法,還包括如果加載每個(gè)組件的存儲(chǔ)器地 址被改變,則更新存儲(chǔ)器映射信息。
15 、 一種其上記錄有用于執(zhí)行更新包括至少 一個(gè)軟件組件的軟件的方法 的計(jì)算機(jī)程序的計(jì)算機(jī)可讀記錄介質(zhì),其中,所述至少一個(gè)軟件組件基于存 儲(chǔ)器映射信息和符號(hào)表被鏈接,所述存儲(chǔ)器映射信息中記錄有指示每個(gè)組件 被加載的位置的存儲(chǔ)器地址信息,所述符號(hào)表中記錄有所述至少一個(gè)軟件組 件所使用的符號(hào)的地址信息,所述方法包括更新所述至少 一個(gè)軟件組件中將被更新的軟件組件;如果加載每個(gè)組件的存儲(chǔ)器地址被改變,則更新存儲(chǔ)器映射信息。
全文摘要
提供了以多個(gè)二進(jìn)制鏡像提供基于組件的軟件、鏈接基于組件的軟件和更新基于組件的軟件的方法以及一種其上記錄有軟件的信息存儲(chǔ)介質(zhì)。所述其上記錄有軟件的信息存儲(chǔ)介質(zhì)包括至少一個(gè)軟件組件;符號(hào)表,記錄有所述軟件組件所使用的符號(hào)的地址信息;存儲(chǔ)器映射信息,記錄有指示加載所述軟件組件和符號(hào)表的位置的存儲(chǔ)器地址信息。
文檔編號(hào)G06F12/02GK101346693SQ200780000974
公開日2009年1月14日 申請(qǐng)日期2007年5月10日 優(yōu)先權(quán)日2006年6月15日
發(fā)明者李鐘碩, 趙成賢 申請(qǐng)人:三星電子株式會(huì)社