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