智能卡操作系統(tǒng)COS底層無關(guān)性設(shè)計(jì)
文章出處:http://m.mjagi.com 作者: 人氣: 發(fā)表時(shí)間:2012年09月25日
摘要:介紹了智能卡COS現(xiàn)狀及存在的問題,針對(duì)底層通用問題,借鑒Java智能卡的優(yōu)點(diǎn)實(shí)現(xiàn)與底層無關(guān)的COS,即針對(duì)不同的硬件平臺(tái),無需重新編寫代碼。根據(jù)參數(shù)的不同提出了幾種不同的解決方案。
智能卡在計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)、數(shù)據(jù)庫處理技術(shù)、高頻技術(shù)、數(shù)據(jù)保護(hù)和密碼學(xué)等的應(yīng)用日趨廣泛,因此智能卡的數(shù)量也在直線上升,因此在各個(gè)卡之間應(yīng)用的移植問題引起了人們的關(guān)注。
智能卡操作系統(tǒng)COS(Chip Operating System)是針對(duì)某一種特定芯片開發(fā)的,該操作系統(tǒng)通常由芯片生產(chǎn)商開發(fā),因?yàn)橹挥兴麄儾耪嬲私庑酒讓拥募夹g(shù)細(xì)節(jié)。每個(gè)廠家芯片COS開發(fā)的環(huán)境都不一樣,在COS支持的上層應(yīng)用不變的情況下,當(dāng)更換不同的硬件時(shí),需要了解新硬件COS的開發(fā)環(huán)境、新硬件底層的技術(shù)細(xì)節(jié),重新將上層邏輯應(yīng)用移植到新的硬件上時(shí),移植的工作量非常大,不低于重新編寫一次COS,而且移植過后COS的穩(wěn)定性也需要重新測試,這樣極大制約了智能卡應(yīng)用的快速發(fā)展。另外,智能卡COS目前使用的開放式系統(tǒng)研發(fā)環(huán)境,存在較高的版權(quán)費(fèi)用,軟件成本偏高;而使用自然語言開發(fā)的COS,目前大多使用層次結(jié)構(gòu),效率較低,編寫的代碼量較大,降低了硬件的效率并增加了存儲(chǔ)成本。針對(duì)以上問題本文提出了解決不同硬件之間操作系統(tǒng)移植的解決方案。通過對(duì)COS結(jié)構(gòu)底層模塊的研究,結(jié)合Java卡的硬件無關(guān)的優(yōu)點(diǎn),設(shè)計(jì)出與底層無關(guān)的COS。
1 COS結(jié)構(gòu)模型
智能卡的設(shè)計(jì)一般分為三層結(jié)構(gòu):硬件抽象層、核心層和應(yīng)用層。其中硬件抽象層設(shè)計(jì)與智能卡芯片物理結(jié)構(gòu)相關(guān)的功能,使其對(duì)上層透明;核心層包含了智能卡的主要結(jié)構(gòu)和功能:卡啟動(dòng)程序及初始化、內(nèi)外部認(rèn)證、命令解析、安全問題及文件系統(tǒng)等核心功能;應(yīng)用層主要提供基于硬件抽象層和核心層的不同應(yīng)用。隨著技術(shù)的發(fā)展,應(yīng)用層將提供更多的有利且方便用戶的應(yīng)用[1]。智能卡結(jié)構(gòu)如圖1所示。
2 Java智能卡
Java卡是在智能卡硬件系統(tǒng)基礎(chǔ)上通過軟件構(gòu)造的一個(gè)支持Java程序下載/安裝并運(yùn)行的軟/硬件系統(tǒng)。通過引入Java虛擬機(jī)技術(shù),Java智能卡在保留了原有智能卡應(yīng)用的便捷、安全等特性的同時(shí),繼承了Java技術(shù)的硬件無關(guān)特性,將智能卡應(yīng)用程序的開發(fā)同智能卡硬件系統(tǒng)相分離,簡化了應(yīng)用程序的開發(fā),提高了應(yīng)用程序的可重用性。Java智能卡包括:智能卡硬件系統(tǒng)、與智能卡硬件系統(tǒng)相關(guān)的本地方法集、Java智能卡虛擬機(jī)JCVM、Java智能卡類庫、Java智能卡應(yīng)用管理組件、Java智能卡運(yùn)行環(huán)境JCRE以及Java智能卡應(yīng)用[2]。其系統(tǒng)結(jié)構(gòu)如圖2所示。
智能卡COS與Java卡的區(qū)別:
從圖1、圖2可以看出,智能卡模塊之間的調(diào)用是直接利用下層的函數(shù)與各模塊的相互作用來實(shí)現(xiàn)應(yīng)用程序,而Java卡是通過一個(gè)虛擬機(jī)來實(shí)現(xiàn)。此虛擬機(jī)即是Java卡與硬件無關(guān)特性的關(guān)鍵模塊,卡內(nèi)的虛擬機(jī)負(fù)責(zé)依據(jù)不同的智能卡硬件和操作系統(tǒng)特性來執(zhí)行安裝到卡上的CAP文件中的字節(jié)碼。
3 智能卡的設(shè)計(jì)及其可行性分析
根據(jù)Java卡的特性,提供本地方法集將與硬件相關(guān)的問題包含在一個(gè)模塊內(nèi),同時(shí)提供Java智能卡類庫,為應(yīng)用程序調(diào)用下層函數(shù)提供統(tǒng)一接口。同時(shí)Java智能卡類庫還包含了所有可能用到的類庫及應(yīng)用擴(kuò)展類庫,以方便用戶安裝盡可能多的應(yīng)用。
將此思想應(yīng)用到C編寫的智能卡,可以將所有智能卡底層的硬件驅(qū)動(dòng)全部包含進(jìn)來,使得硬件驅(qū)動(dòng)模塊成為硬件驅(qū)動(dòng)集模塊,同時(shí)又保持API接口不變,這樣上層應(yīng)用設(shè)計(jì)時(shí)就不需改變調(diào)用接口,還是以同一接口調(diào)用,即可完成應(yīng)用的移植問題。
硬件驅(qū)動(dòng)集,使上層都使用統(tǒng)一接口??紤]到所有函數(shù)調(diào)用都使用相同意義的參數(shù),根本無法區(qū)別驅(qū)動(dòng)集中的任一相應(yīng)函數(shù)。因此,不可能將所有驅(qū)動(dòng)的參數(shù)都放到接口的參數(shù)列表中來調(diào)用對(duì)應(yīng)的底層函數(shù)。因?yàn)檫@樣從參數(shù)的個(gè)數(shù)來區(qū)別驅(qū)動(dòng)集的函數(shù)不可行。為此本智能卡的設(shè)計(jì)采用了如下方法:
(1)借鑒網(wǎng)絡(luò)編程時(shí),通過參數(shù)來指定協(xié)議確定通信,因此可以增加一個(gè)參數(shù)來指定智能卡的類型來確定需要調(diào)用的函數(shù)。例如對(duì)于readflash函數(shù):void fs_read_Flash(unsigned char*XRamAddr,unsigned long sAddr, unsigned int Length)通過增加參數(shù)char TYPE來確定類型。此時(shí)函數(shù)變?yōu)椋簐oid fs_read_Flash(char TYPE,unsigned char*XRamAddr, unsigned long sAddr, unsigned int Length)然后通過swith…case即可以區(qū)分各個(gè)驅(qū)動(dòng)函數(shù)從而實(shí)現(xiàn)驅(qū)動(dòng)集的分類。而對(duì)于各個(gè)具體的驅(qū)動(dòng)函數(shù)則通過它們的硬件名來命名其函數(shù)名以區(qū)分各個(gè)驅(qū)動(dòng)函數(shù)。這樣就不會(huì)混合各個(gè)驅(qū)動(dòng)函數(shù)。改進(jìn)的微內(nèi)核層結(jié)構(gòu)如圖3所示。
此方法應(yīng)用到Java卡的類庫的特點(diǎn)是并非所有的庫函數(shù)都會(huì)用到,但對(duì)于所有的可能情況都考慮到了,因?yàn)橹悄芸ǖ姆N類是有限的,因此通過swith語句來區(qū)分各個(gè)卡的驅(qū)動(dòng)函數(shù),此方法是可行的。
但此方法存在一個(gè)問題是:對(duì)于上層調(diào)用硬件驅(qū)動(dòng)時(shí)需指明硬件類型,因此當(dāng)硬件改動(dòng)時(shí),應(yīng)用層的移植需要修改所有硬件類型。雖然可利用工具查找并替換來完成,但這也是此方法的一個(gè)缺點(diǎn)。
此外,也可以將驅(qū)動(dòng)層與硬件綁定,每個(gè)功能相同的驅(qū)動(dòng)采用同一函數(shù)名,同時(shí)驅(qū)動(dòng)層的各驅(qū)動(dòng)的參數(shù)相同,因此在上層調(diào)用接口不變的情況下就可以調(diào)用不同硬件的相應(yīng)驅(qū)動(dòng),無需改變?nèi)魏魏瘮?shù)及參數(shù)。
(2)借鑒Java卡的特點(diǎn),可以將硬件與本地方法即硬件驅(qū)動(dòng)綁定在一起,而上層接口保持不變。若各個(gè)與硬件綁定的驅(qū)動(dòng)函數(shù)參數(shù)不一致,可以在函數(shù)內(nèi)部進(jìn)行調(diào)整使得對(duì)上層接口保持一致性。
(3)最簡單的方法就是將所有的智能卡硬件設(shè)定一個(gè)規(guī)范,所有的智能卡都遵循此規(guī)范,這樣某一智能卡的COS在所有智能卡中都可以使用,某一智能卡上的應(yīng)用在其他智能卡上也可以同時(shí)使用,這樣就實(shí)現(xiàn)了智能卡的移植問題。即制造統(tǒng)一的智能卡芯片,所有的智能卡的硬件驅(qū)動(dòng)層相同,此時(shí)上層調(diào)用的接口也相同,所有的應(yīng)用都是在相同的底層基礎(chǔ)上開發(fā)的,相互之間的移植也是完全適用的。
在智能卡的迅速發(fā)展中,對(duì)于此移植問題的解決,可以保證上層應(yīng)用開發(fā)的一致性,使得更多的應(yīng)用可以在卡間相互應(yīng)用,使智能卡的整體性能得到提升,應(yīng)用也更加廣泛。
參考文獻(xiàn)
[1] 李春風(fēng).歐陽小星RF_SIM卡的多應(yīng)用COS研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2011(2):57-59.
[2] 張大偉.靳偉Java智能卡原理與應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2007.