梅 歡
(河北省科學(xué)院應(yīng)用數(shù)學(xué)研究所,河北石家莊 050081)
USB KEY設(shè)備在W indows CE下的驅(qū)動(dòng)實(shí)現(xiàn)
梅 歡
(河北省科學(xué)院應(yīng)用數(shù)學(xué)研究所,河北石家莊 050081)
針對(duì)USB KEY設(shè)備,介紹了在嵌入式系統(tǒng)Window s CE下流設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)。
USB KEY設(shè)備;Window s CE
Window s CE是微軟公司嵌入式、移動(dòng)計(jì)算平臺(tái)的基礎(chǔ),它是一個(gè)開放的、可升級(jí)的32位嵌入式操作系統(tǒng)。同時(shí)隨著USB2.0設(shè)備的不斷增加,USB設(shè)備驅(qū)動(dòng)開發(fā)在嵌入式開發(fā)中變的越來越重要。筆者以ARM SYS2440開發(fā)板為硬件平臺(tái),嵌入式操作系統(tǒng)W indow s CE為軟件平臺(tái),討論了安全鎖USBKEY的驅(qū)動(dòng)程序的實(shí)現(xiàn)方法。
從驅(qū)動(dòng)加載方式來看WinCE可分為本機(jī)設(shè)備驅(qū)動(dòng)(Built-In Driver)、可加載驅(qū)動(dòng)(Loadable Driver)以及混合型驅(qū)動(dòng)。
本機(jī)設(shè)備驅(qū)動(dòng)即Native Device D rivers。通常是一些與圖形界面相關(guān)的 I/O設(shè)備驅(qū)動(dòng)。例如鼠標(biāo)鍵盤驅(qū)動(dòng)、顯卡驅(qū)動(dòng)及觸摸屏驅(qū)動(dòng)等。被 GWES.exe加載和使用,可以提高驅(qū)動(dòng)和圖形的效率。
可加載設(shè)備是指可與平臺(tái)連接和分離的第三方接口設(shè)備,可由用戶隨時(shí)安裝和卸載。這種外圍設(shè)備的驅(qū)動(dòng)也被稱為流驅(qū)動(dòng)。以DLL動(dòng)態(tài)鏈接庫的形式存在。這些驅(qū)動(dòng)可以在系統(tǒng)啟動(dòng)時(shí)或者和啟動(dòng)后的任何時(shí)候由Device.exe動(dòng)態(tài)加載。
混合型驅(qū)動(dòng)是指同時(shí)有定制和流驅(qū)動(dòng)兩套驅(qū)動(dòng)接口,但是和系統(tǒng)的交互只使用流驅(qū)動(dòng)接口,比如PC卡槽驅(qū)動(dòng)。
筆者開發(fā)的USB KEY是基于公鑰基礎(chǔ)設(shè)施PKI(Public Key Infrastructure)的加密狗,其外觀類似于U盤,由硬件和軟件兩部分搭建而成。其硬件的核心部件是USB主控制器、加密芯片,通過USB接口與上位機(jī)進(jìn)行保密通信。USB KEY的軟件核心是片上操作系統(tǒng)COS(Chip Operating System)。
USB KEY采用的是航芯電子的SCCII芯片,這款芯片基于國產(chǎn)32位CPU核的SOC開發(fā)平臺(tái)而開發(fā),具備高處理能力、高安全性、低功耗等特點(diǎn)。芯片內(nèi)置USB 2.0控制器,符合USB 2.0標(biāo)準(zhǔn),支持高速和全速設(shè)備。具有兩個(gè)endpoint,在點(diǎn)對(duì)點(diǎn)通信中對(duì)USB外設(shè)進(jìn)行傳輸控制。
驅(qū)動(dòng)程序使用立宇泰公司的ARM SYS2440開發(fā)板實(shí)現(xiàn)。該開發(fā)板的cpu采用三星S3C2440芯片,ARM 920T內(nèi)核,主頻400M Hz,最高可達(dá)533M Hz。
對(duì)USB KEY設(shè)備驅(qū)動(dòng)采用了流接口驅(qū)動(dòng)的模式。實(shí)現(xiàn)流式接口驅(qū)動(dòng)程序通常只需要4個(gè)步驟[1]:
1)為流式接口驅(qū)動(dòng)程序選擇一個(gè)前綴;
2)實(shí)現(xiàn)流式接口驅(qū)動(dòng)DLL所必需的接口函數(shù);
3)編寫DLL的導(dǎo)出函數(shù)定義文件.DEF;
4)為驅(qū)動(dòng)程序配置注冊(cè)表。
2.2.1 為流式接口驅(qū)動(dòng)程序選擇一個(gè)前綴
應(yīng)用程序通常須通過設(shè)備的名稱對(duì)驅(qū)動(dòng)程序進(jìn)行訪問。這里采用3個(gè)大寫字母,加一個(gè)1-9之間的數(shù)字過程的傳統(tǒng)方式命名,將USB KEY的前綴定義為“JKY”。
2.2.2 實(shí)現(xiàn)流式接口驅(qū)動(dòng)DLL所必需的接口函數(shù)
Platform Builder是微軟推出的針對(duì)Window s CE開發(fā)的集成開發(fā)環(huán)境。USB KEY驅(qū)動(dòng)使用這一環(huán)境編寫代碼。在Platform Builder中,新建一個(gè)SMDK2440的平臺(tái),然后再新建一個(gè)Win32 DLL項(xiàng)目,命名為U sb KeyD river。
Window s CE系統(tǒng)的流接口是屬于固定開放的規(guī)范,每個(gè)流接口驅(qū)動(dòng)程序必須實(shí)現(xiàn)一組標(biāo)準(zhǔn)的函數(shù),用來完成標(biāo)準(zhǔn)的文件I/O函數(shù)和電源管理函數(shù)。USB KEY的DLL接口如表1所示。
表1 流式接口函數(shù)
2.2.3 編寫DLL的導(dǎo)出函數(shù)定義文件.DEF
.DEF文件定義了DLL的導(dǎo)出函數(shù)列表。在U sb KeyDriver中插入一個(gè)文本文件,命名為Usb KeyDriver.def,然后在該文件中輸入如下內(nèi)容:
編譯后可使用Dumpbin工具查看DLL中是否正確地導(dǎo)出了這些函數(shù)。
2.2.4 為驅(qū)動(dòng)程序配置注冊(cè)表[2]
創(chuàng)建驅(qū)動(dòng)程序加載所需的注冊(cè)表信息是由 USBlnstallDriver()函數(shù)完成的,它在設(shè)備第一次插入U(xiǎn)SB接口時(shí)調(diào)用。使用RegisterClientD rivedD()和RegisterClientSetings()來注冊(cè)相應(yīng)的設(shè)備信息。卸載驅(qū)動(dòng)程序時(shí)會(huì)調(diào)用另外一個(gè)函數(shù) USBUninstallDriver(),它可以刪除 USB InstallD river)時(shí)創(chuàng)建的注冊(cè)表信息。
隨著嵌入式系統(tǒng)的應(yīng)用,越來越多的USB設(shè)備將需要支持這一平臺(tái)。本文實(shí)現(xiàn)了一個(gè)特殊設(shè)備USB KEY的驅(qū)動(dòng),對(duì)于今后開發(fā)其他的設(shè)備有一定的參考意義。
[1] 何宗健.Window s CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 劉彥峰,李崢,馬智.基于Window s CE的USB Key驅(qū)動(dòng)程序設(shè)計(jì)[Z].微計(jì)算機(jī)信息,2008-12-03.
The realization of USB KEY device driver based on W indows CE
MEIHuan
(Institute of A pp lied M athematics,Hebei Academ y of Sciences,Shijiazhuang Hebei050081,China)
Aim at USB Key device,this paper introduces the realization of Steam s device driver based on W indow s CE.
USB KEY device;Window s CE
TP317
:A
1001-9383(2011)01-0023-03
2011-01-10
梅歡(1981-),女,河北石家莊人,研究實(shí)習(xí)員,主要從事計(jì)算機(jī)應(yīng)用等方面的研究.