潘澤鍇,覃貴禮,羅云芳(廣西職業技術學院 計算機與電子信息工程系,南寧 530226)
?
基于流式接口驅動的USB無線網卡①
潘澤鍇,覃貴禮,羅云芳
(廣西職業技術學院 計算機與電子信息工程系,南寧 530226)
摘 要:對比Windows CE系統驅動開發方式,提出以流式接口驅動模式的USB無線網卡的設計與開發,詳細闡述了流式接口驅動的體系結構與實現流程,面向ARM11處理器的嵌入式平臺以流式結構為框架實現USB無線網卡驅動開發,通過現場測試結果表明系統驅動實現方式切實可行,系統運行穩定、可靠,基本滿足系統設計的目標要求.
關鍵詞:流式接口; 嵌入式系統; USB; 無線網卡
設備驅動程序時操作系統與硬件交互的方式,是連接硬件和操作系統的橋梁.它的功能主要是初始化并驅動內部和外圍的硬件設備,或者為它們提供接口,以將操作系統和硬件設備連接起來,使其能夠識別指定的設備并為相應的應用程序提供設備服務,與操作系統實現無縫連接[1].
Windows CE是微軟推出功能強大、高效、可裁剪32位嵌入式開發系統,其運行機制與應用于普通PC機的操作系統類似,但是其驅動程序開發工具和開發方法存在較大區別.所以,一般熟悉Windows環境的程序員在Windows CE環境下進行程序開發時,往往難以很快適應[2,3].相對于同樣是流行的Linux嵌入式系統,USB設備在邏輯上分為設備、配置、接口和端口4個層次,層次多勢必造成開發和調試的難度增大,這就對初學者提出較高的要求; 而Windows CE平臺流式接口驅動可以簡化成模式設備和平臺相關驅動兩個層次,模式設備驅動相對固定,可以和別的驅動開發共用,對比兩個開發模式,流式接口驅動開發相對簡單易行[4].從硬件上考慮,相對其他開發模式,USB無線網卡流接口驅動開發的硬件可以要求硬件的復雜度較低,外圍電路相對較少,硬件亦可以整體的方式給出,從而降低開發難度[5].
為此,本文就Windows CE 下的驅動工作原理與程序運行機制進行了分析,設計了一個以三星ARM11處理器S3C6410嵌入式平臺為核心的USB無線網卡驅動系統,詳細闡述平臺流接口驅動設計以及USB無線網卡驅動的實現方法,其他類型更為復雜的接口程序亦可按此方式進行設計和開發[6].
2.1Windows CE驅動對比分析
在Windows CE系統中,驅動程序分為流接口驅動程序和本機設備驅動程序.本機設備驅動程序主要是和系統本身自帶的設備相關,而流接口驅動程序則針對系統中所有外接的設備.而在本系統開發中,USB無線網卡作為一個系統外設加入整個系統,有鑒于此,采用流式接口驅動開發切實易行.
流接口驅動程序的主要任務是把對外設相應的操作傳遞給設備管理器應用程序,這是通過把設備表示成文件系統的一個特殊的文件來完成的.在此結構下,把所有的硬件設備都看成文件,和設備的交互其實就是讀寫文件,也就是數據流動.這樣開發驅動不僅簡單實用,并且用戶也用一致的接口訪問硬件,大大降低了開發的難度.與流驅動相反,本地驅動主要是人機界面相關的驅動,它們由GWES管理,在系統啟動時加載.本地驅動由操作系統調用; 本地驅動提供給操作系統的不是標準的流接口,而是事先約定好的特定接口,不同的設備,接口也不一樣,應用程序不能訪問,對于這類驅動,驅動調試助手是無能為力的,對于開發者來說編譯、下載、驗證都較為困難.對比兩者的特點,在進行USB無線網卡驅動開發中,選用流式接口驅動簡單易行,同時增加驅動可移植性和可靠性.
2.2流接口驅動程序工作體系結構
流接口驅動程序表現為一個動態鏈接庫,由設備管理器統一加載、管理和卸載,達到應用程序訪問驅動程序、操作硬件的目的.流接口驅動程序通過編譯后,生成DLL 文件,即動態鏈接庫文件.操作系統可在運行時動態地加載需要的DLL文件,這樣可以輕松實現外設的即插即用[1,7].
流接口驅動程序具有固定的入口點函數,它把設備抽象為文件進行操作,Windows CE 的文件系統通過這些入口點函數與流接口驅動進行通信,而應用程序則使用操作系統提供的文件API對外設進行訪問.為此,設計流式驅動程序的體系結構如圖1所示.
其中,應用層模塊和流式就扣驅動模塊由用戶自己設計,文件管理模塊FileSys.exe和設備管理器模塊Device.exe模塊由Windows CE操作系統提供,用戶不能修改.

圖1 流式驅動程序體系結構
首先,應用層接收到操作界面發來的執行命令,調用API文件向操作系統的文件管理器FileSys.exe加入進程,然后文件管理器模塊把執行權交給設備管理器,由它根據具體的請求,調用不同流式接口函數與硬件之間進行交互,最終完成硬件的具體操作.在整個流接口驅動結構中,每個流接口驅動必須實現一組標準的函數,用來完成標準的文件I/O函數和電源管理函數,這些函數提供給Windows CE操作系統的內核使用.不管流接口驅動控制什么樣的設備,它都向其它模塊提供同樣的流接口DLL函數,任何一個邏輯上可以看作數據源的設備都可以為其實現一個流接口驅動程序[7].
2.3流式接口驅動實現流程
流接口驅動程序是以動態鏈接庫形式存在的,由設備管理器統一加載、管理和卸載,它接受來自設備管理器和應用程序(通過操作系統的文件系統)的命令.在這個過程中匯涉及很多實體,這里僅保留硬件、流式接口程序、系統注冊表、設備管理器與應用程序五個實體管理模塊.整體流式接口驅動工作原理流程圖如圖2所示.
由圖可以清晰的看出流式驅動程序工作整個過程.在流程之初,設備管理器Device.exe從注冊表DLL鍵值中獲取所在DLL文件名加載驅動程序,調用LoadDriver()函數把DLL文件進程加載到虛擬內存空間中; 然后設備管理器調用程序中xxx_Init函數對硬件進行一些最基本初始化操作; 至此,流式接口驅動已成功被加載[1,7].

圖2 流式驅動工作原理流程圖
接下來是應用程序使用設備文件管理器FileSys.exe調用CreatFile()打開設備,使用xxx_Open函數對硬件進行一些額外初始化工作,使硬件進入工作狀態,并且返回結果給設備管理器進行下一步操作.最后,文件管理器根據CreatFile()返回的句柄,通過Device.exe調用ReadFile()函數讀取設備數據信息,調用xxx_Read函數與硬件交互,從硬件中讀取操作信息.當應用程序不再使用該設備時,系統調用CloseHandl()將設備關閉,流式接口驅動程序的完整生命周期至此結束.
驅動本身會把這些接受到的命令轉化為外部設備相應動作.此外,該系統設計的流式接口驅動程序時放在用戶態而不是核心態來實現,也增強了系統穩定性,為驅動人員提供了便利.而在嵌入式系統中,以流驅動模式為策略的框架下USB無線網卡的設計與開發靈活并且簡單易行,下面以USB無線網卡驅動實現方法說明流接口優點.
流接口驅動程序調用設備管理器與系統內核或外圍設備打交道,給操作系統和驅動程序帶來很大靈活性.根據流式驅動工作原理,設計的USB無線網卡驅動程序是以支持S3C6410處理器的Windows CE驅動程序框架為基礎,根據S3C6410處理器的USB接口單元以及USB無線網卡的特性和原理而設計的.與上述的流式程序體系結構相對應,整個系統的核心控制簡化三個層面: 設備驅動層、實時操作系統、應用層[8].
3.1驅動整體構架設計
本系統的USB無線網卡驅動采用Windows CE的流接口驅動方式,系統驅動整體框架結構如圖3所示.

圖3 系統驅動整體框架結構圖
設計的整個系統通過Windows CE內核操作系統進行控制,USB網卡驅動包括實現 USB總線協議棧調用三個入口函數和實現設備控制的流接口函數[9].USB無線網卡的驅動首先調用USBDeviceAttach()、USBInstallDriver()、USBUninstallDriver()這三個入口,再在內核總編譯其他流接口函數,在內核系統中成功被編譯USB.dll動態連接庫的形式,通過設備管理器Device.exe識別枚舉程序中以USB前綴的函數并加載,流接口函數可以實現電源控制、I/O管理、中斷控制,應用程序通過文件系統API命令調用驅動程序流接口函數發送控制命令[10].
3.2系統驅動入口函數實現
在Windows CE下,USB設備驅動編寫使用USBD提供的函數操作USB設備,以動態鏈接庫DLL提供的入口點與USBD模塊進行交互,函數調用流程如圖4.

圖4 USBD模塊函數調用流程圖
從USBD模塊函數調用流程圖可以看出,USBD模塊函數調用過程主要由USBDeviceAttach()、USBInstallDriver()、USBUninstallDriver()三個函數串連起來,USB驅動傳輸通道基本配置也主要由三個基本函數完成[11].
(1)USBDeviceAttach()函數.當USB無線網卡連接到計算機上時,它是驅動程序的入口函數,USBD模塊調用此函數,這個函數主要用于初始化無線網卡模塊,取得無線網卡設備信息,配置無線網卡設備,并且申請必需的資源.它依次調用下面三個函數: RegisterClientDriverID、RegisterClientSetings、和GetSetKeyValue和完成注冊表的配置.
(2)USBInstallDriver()函數.首先實現主控制器相關寄存器的初始化,在獲取網卡信息的情況下,指定網卡總線的類型和設備中斷ID號,然后為片內存儲器分配內存,綁定虛擬地址.另外,主要用于創建一個驅動程序加載所需的注冊表信息,例如網卡讀寫超時,設備名稱等,同時為包括網卡控制流程信息提供進程.
(3)USBUninstallDriver()函數.主要用于釋放驅動程序所占用的資源,釋放其他進程所占用的內存空間,以及刪除USBInstallDriver()函數創建的注冊表等.這個過程與USBInstallDriver()函數操作順序相反.解除注冊信息,可以使空函數.
3.2系統流接口驅動函數實現
USB無線網卡驅動程序實現流接口形式驅動以后,文件系統的API接口通過訪問特殊文件來實現與設備信息的交換,流接口函數直接調用與硬件設備相關的處理函數,省去層與層之間調用和信息傳遞,有利于提高驅動實現的實時性.在系統軟件整體框架的基礎上,設計系統流接口驅動函數實現流程如圖5所示[11,12].
在軟件實現前,系統首先檢測USB無線網卡硬件是否連接,如果找到相應的硬件設備,打開設備管理器Device.exe,連接I/O控制,查詢到設備后加載驅動配置傳輸模式,根據獲取的加載流驅動程序是否成功調用API命令決定是否再加載,直至成功加載,關閉設備.USB無線網卡流接口驅動是通過初始化函數USB_Init、打開設備管理函數USB_Open、I/O控制函數USB_ IOControl、從系統總線讀取圖像信息函數USB_ Read、向系統總線寫入控制命令函數USB_Write、設備卸載函數USB_Deinit等9個基本功能函數來實現[13].

圖5 軟件實現流程圖
系統通過驅動程序提供的入口函數和上述接口函數實現,在USB無線網卡實現過程中完成了硬件的初始化、時序同步、信息流控制等功能,起到設備的控制中樞作用.在流式驅動開發完成后,通過編寫應用程序在嵌入式終端的觸摸屏上顯示出來.流接口函數直接調用與硬件設備相關的處理函數,省去層與層之間調用和信息傳遞,有利于提高系統工作過程控制的實時性.
完成基于流式接口驅動的USB無線網卡驅動開發以后,需要對系統的性能和一些參數進行現場調試.和其他接口不一樣,USB無線網卡模塊可以輕松實現熱插拔,嵌入式系統會自動識別到接口有硬件載入,并調用內核無線網卡驅動程序實現它們之間數據的交互,USB無線網卡模塊驅動程序初始化包括注冊表的寫入,函數的加載啟動信息反饋到調試軟件上,無線模塊在加載驅動時的啟動信息如圖6所示.

圖6 USB無線網卡驅動加載信息
調試中已經配好無線通信網絡,從系統的無線網卡窗口會搜索到相關的無線信息,如圖7所示.在調試中使用無線寬帶路由器,系統會自動搜索到,設置好安全選項之后連接即可.

圖7 USB無線網卡連接
從USB無線網卡現場測試環境和結果看來,設計基于流式接口驅動的USB無線系統具有體積小、功耗低、運行速度快、連接方便等特點,設計具有友好的人機交互界面,具有很好的實用推廣價值.
Windows CE系統流接口設備驅動程序是一種結構比較簡潔的驅動程序,在Windows CE驅動中占有重要的位置.本文在透徹了解了驅動開發的機理后,以USB無線網卡驅動開發為例詳細闡述平臺流接口驅動整體流程設計與驅動函數實現方式,表明系統運行穩定、可靠,基本滿足系統設計的目標要求.在此基礎上,還可以向驅動程序中添加自己需要實現的其它功能,甚至應用程序的一部份功能也可以在加載驅動時實現,為其他類似驅動開發提供參考,同時也為后期有特殊需要的應用程序開發奠定基礎.
參考文獻
1張冬泉,譚南林,王雪梅等.Windows CE 實用開發技術.北京: 電子工業出版社,2006.
2陳凱,鄧明,張啟東等.大地電磁儀的Windows CE啟動程序設計.計算機工程,2008,34(13):277–279.
3賈銀潔,許鵬飛.USB無線網卡驅動程序的設計.廣東電腦與電訊,2007(10):13–14.
4葉學程,鄭霖.嵌入式Linux的USB—Chirp無線網卡驅動設計.單片機與嵌入式系統應用,2014(7):53–56.
5侯戰勝,姚放吾.基于i.MX21的AdHoc網絡終端的設計與實現.微機發展,2010(1).5–8.
6鄭秀杰.基于嵌入式WinCE 6.0的脈沖/數據發生器軟件設計.現代電子技術,2013,12:83–85.
7何宗鍵.Windows CE嵌入式系統.北京:北京航空航天大學出版社,2006.
8龔小林,段建紅.基于Windows CE.Net嵌入式系統的數據庫設計與應用.現代電子技術,2013,32(20):71–74.
9辛華峰,于楓,譚健,王文麗.嵌入式 USB 主從機應用模塊.吉林大學學報(工學版),2005,35(2):18–21.
10劉全利,宋健軍,王偉.基于USB總線的多功能車輛總線網卡設計與實現.上海交通大學學報,2011,45(8):1207–1210.
11胡彬彬,郭淑琴.支持WPA加密的無線網卡驅動分析與功能實現.電聲技術,2014,38:82–85.
12Purcell,A.Quickly and easily automate test systems with USB.Electronic Design,2002,50 (23):67–70.
13汪兵.Windows CE嵌入式高級編程及其實例詳解.北京:中國水利水電出版社,2008.
USB Wireless Network Card Based on Stream Interface-driven
PAN Ze-Kai,QIN Gui-Li,LUO Yun-Fang
(Department of Computer and Electronic Information Engineering,Guangxi Polytechnic,Nanning 530226,China)
Abstract:Aimed at Windows CE system-driven development,the development and design of USB wireless network adapter under the frame of streaming interface drive mode strategy is proposed.The overall process design of the platform streaming interface drive and the function implementation mode of USB wireless network adapter are elaborated.Field testing results show that the system is stable and reliable in operation and can basically satisfy the service objects of the system design.
Key words:stream interface; embedded systems; USB; wireless network card
基金項目:① 廣西區教育廳自然科學基金(YB2014488,KY2015YB384);廣西職業技術學院自然科學資金(121208)
收稿時間:2015-08-14;收到修改稿時間:2015-09-28