国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区

WinCE USB驅動開發

來源:網絡

點擊:2070

A+ A-

所屬頻道:新聞中心

關鍵詞: WinCE,USB驅動

      隨著USB2.0設備的不斷增加,USB設備驅動開發在嵌入式開發中變的越來越重要。Windows CE支持USB 2.0更是對這一波新技術浪潮產生巨大的推動。近期我負責一個這樣的項目,在WinCE下開發USB接口的外圍設備驅動。當時做這個項目花費了我相當多的時間和精力,錯走許多冤枉路使我精疲力盡。

      項目需求是在已調好的ARM9板子上開發USB WiFi無線網卡的驅動程序,具體要求是驅動程序平臺是WinCE,CPU類型支持ARM構架,要能比較方便地移植到X86;驅動接口類型是USB2.0和Wlan 802.11b。后來因為連接效率一直有問題,就東改西改,最后改的是一塌糊涂。幸好老板比較寬容,給了我充裕的時間和支持,這里將關于USB驅動開發的點滴理解與大家分享。

      1. 什么是WinCE設備驅動程序?

      (1)從驅動加載方式來區分

      在深入探討Windows CE所支持的外圍設備驅動程序之前,先了解在WinCE平臺上使用的兩種設備:內建設備和可安裝設備。因此,從驅動加載方式來看WinCE可分為本機設備驅動(Built-In Driver)、可加載驅動(Loadable Driver)以及混合型驅動。

      ①本機設備驅動

      本機設備驅動即Native Device Drivers。WinCE設計成可直接使用內建設備,這些設備由本機驅動過程控制,而本機驅動程序又與WinCE的核心組件緊密相連。這些驅動對應的設備通常在系統啟動時,在GWES的進程空間內被加載,因此它們不是以獨立的DLL形式存在,也因此要求每一個本機驅動程序都必須與稱為設備驅動程序接口(DDI)的特定接口一致。

      本機設備是指整合進平臺的設備,其中包括顯示、觸摸面板、音頻、串行埠、LED、電池和PC卡插座等。如果沒有這些本機設備整個系統就不能和用戶信息交流,例如觸摸面板和顯示等。本機驅動程序一般設計為動態鏈接庫,但有兩個例外:電池和LED驅動程序由于小而設計為靜態庫(當建立CE圖像時與GWES模塊鏈接)。這些設備相應的驅動程序是在WinCE平臺開發過程中由OEM開發的,它們儲存在ROM或閃存內。通常只有OEM才會對本機設備驅動程序進行修改,其它自由設備生產商只提供附加的硬件設備,對本機設備驅動程序不會有過多涉及。

      ②可加載設備驅動

      可加載設備是指可與平臺連接和分離的第三方接口設備,可由用戶隨時安裝和卸載。這種外圍設備的驅動也被稱為流驅動,這些驅動可以在系統啟動時或者和啟動后的任何時候由設備管理器動態加載。通常這類驅動是以DLL動態鏈接庫的形式存在,系統加載后這些驅動程序也只是以用戶態的角色運行。可加載驅動程序是通過文件操作API來從設備管理器和應用程序獲得命令。在WinCE典型的可加載驅動有:PCMCIA driver(PCMCIA.dll)、Serial driver(SERIAL.dll)、ATAFLASH driver(ATA.dll)、Ethernet driver(NE2000.dll,SMSC100FD.dll)。

      與本機驅動程序不同的是,所有可加載流驅動程序都共享一個公用接口。該接口由每個驅動程序內的10個功能或記錄點組成,這些功能與應用程序所用的文件API中的功能匹配。因此,控制可加載設備的流接口驅動程序一般由應用程序存取,流接口驅動程序由一個特殊文件來將設備功能展現給應用程序的,該文件可被打開、讀取、寫入和關閉。例如,用戶將一個GPS設備與平臺相連后,就可啟動有GPS功能的應用程序來存取并使用該設備。WinCE是使用已有的API來讓應用程序存取這些驅動程序,而不是建立新的API。

      (2)從驅動程序層次上分類

      一般可以分為獨立驅動和層次型驅動兩類。獨立驅動程序是指將驅動程序編寫成同時包含Model Device Driver(MDD)和Platform Dependent Driver(PDD)層的獨立驅動。使用獨立驅動的好處在于可以省去MDD和PDD層驅動之間的信息傳遞,這一點在實時處理中非常重要。獨立驅動的代碼包括中斷服務例程和平臺相關處理函數。另外,如果設備的操作和MDD驅動層的接口描述相吻合,用獨立驅動程序可以提高處理性能。

      層次型驅動是指分為兩層,較上層的MDD和比較下層的PDD。MDD實現的是和平臺無關的功能,它描述了一個通用的驅動程序框架;而PDD是和硬件以及平臺相關的代碼組成。MDD調用PDD中特定的接口來獲取硬件相關的信息。當使用層次型驅動的時候,一般只需要基于相近的樣列驅動程序,針對特定的硬件只修改PDD程序,MDD建立的框架可繼續使用。但由于層次間接口的層層調用以及消息的傳遞,使得處理速度相對于獨立驅動程序要慢。因此,在嵌入式實時要求苛刻的環境下,層次型驅動顯得不是很適合。

      簡單的說,獨立驅動是把PDD與MDD寫在一起,沒有做嚴格的區分,通常這種驅動比較簡單,比如ATADISK。至于本機驅動和加載式流驅動是從驅動與系統其它模塊(調用者)的接口形式上做的分類。所以,一個加載式驅動程序可以是獨立的流式驅動,例如ATADISK;也可以是分層的流式驅動,例如OHCI。也就是說,獨立和分層是驅動實現方式上的分類,而本機和加載流式則是驅動模型上的分類。所謂本機驅動就是操作系統有保留專門的接口,而加載流式驅動是指編寫DLL文件導出各種流式接口函數的接口。

      2. USB加載式流接口驅動要點分析

      為了支持不同類型的外圍設備,WinCE平臺提供了具有定制接口的流接口驅動程序模型。因為大部分USB外圍設備由于功能性更適合流接口驅動的結構,所以一般都采用加載式流接口驅動程序模型來開發USB設備驅動程序。

      (1)USB系統結構分析

      WinCE下USB系統軟件由兩層組成:較高USB設備驅動程序層和較低的USB函數層。較低的USB函數層本身又由兩部分組成:較高的通用串行總線驅動程序(USBD)模塊和較低的主控制器驅動程序(HCD)模塊。通過HCD模塊功能和USBD模塊實現高層的USBD接口函數,USB設備驅動程序就能與外圍設備進行通訊。

      在數據傳輸的過程中,操作流程通常按下列的次序進行:①USB設備驅動程序進行數據傳輸的初始化,即通過USBD接口函數給USBD模塊發送數據傳輸的請求。②USBD模塊將該請求分成一些單獨的事務。③HCD模塊排出事務次序。④主控制器硬件執行事務。這里需要提醒的是,所有的事務都是從主機發出的,外圍設備完全是被動接受型的。

      (2)USB設備驅動程序入口點函數

      從結構分析我們可知,所有的USB設備驅動程序必須在它們的DLL庫設置一定的入口點與USBD模塊進行適當的交互。設置入口點函數有兩個作用:一是使得 USBD 模塊能與外部設備交互;二是使得驅動程序能創建和管理任何可能需要的注冊鍵。

      下面簡要介紹相關函數的作用:USBDeviceAttach是當 USB 設備連接到主計算機時運行,USBD模塊會調用這個函數初始化USB設備,取得USB設備信息和配置USB設備,并且申請必需的資源。USBInstallDrive是在第一次加載USB設備驅動程序時首先被調用,它使得驅動程序能創建需要的注冊鍵,用于將一個驅動程序所需的注冊表信息寫入到HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers目錄下,例如設備名稱等。需要注意的是,USB設備驅動程序不使用標準的注冊表函數,而是使用RegisterClientDriverID()、RegisterClientSettings()函數來注冊相應的設備信息。

      USBUninstallDriver是在用戶刪除USB設備驅動程序時調用,負責刪除注冊鍵并釋放其它相關資源。它通過調用UnRegisterClientSettings()和UnRegisterClientDriverID()函數來刪除由驅動程序的USBInstallDriver()函數創建的所有注冊鍵。因此,我們在驅動程序中就需要嚴格按照這三個函數的原型來實現,否則就不能為設備管理器所識別。

      3.USB設備流接口驅動的實現步驟

      從WinCE USB設備驅動模型及結構分析中,我們可以清晰的看到主機和外設之間的實現方式。在主機端,通過USBD模塊和HCD模塊使用默認的PIPE訪問一個通用的邏輯設備,實際上就是說USBD和HCD是一組訪問所有USB設備的邏輯接口,它們負責管理所有USB設備的連接、加載、移除、數據傳輸和通用配置。其中HCD是主機控制驅動,是為USBD提供底層的功能訪問服務,USBD是USB總線驅動,位于HCD的上層,利用HCD的服務提供較高層次的功能。因此,實現USB加載流驅動程序大致需要完成以下步驟:

      (1)選擇代表設備的文件名前綴。前綴非常重要,設備管理器在注冊表中通過前綴來識別設備。同時,在流接口命名時也將這個前綴作為入口點函數的前綴,如果設備前綴為XXX,那么流接口對應為XXX_Close,XXX_Init等。

      (2)設置驅動的各個入口點函數。所謂入口點是指提供給設備管理器的標準文件I/O接口。在生成一個DLL后,就用設備文件名前綴替換名字中的XXX。因此,每個加載式流接口驅動程序必須實現XXX_Init()、XXX_IOControl()以及XXX_PowerUp()等一組標準的函數,用來完成標準的文件I/O函數和電源管理等。

      (3)建立.DEF文件。當設備管理器初始化USB設備編譯出來的流接口函數后,還必須建立一個.def文件。DEF文件定義了DLL要導出的接口集,而且加載式流驅動大多是以DLL形式存在的,所以應將DLL和DEF的文件名統一起來。DEF文件告訴鏈接程序需要輸出什么樣的函數,最后將驅動程序編譯到內核中去,這樣這個USB設備流接口驅動程序就可以被應用程序調用。

      (4)在注冊表中為驅動程序建立表項。在注冊表中建立驅動程序入口點,這樣設備管理器才能識別和管理這個驅動。此外,注冊表中還能存儲額外的信息,這些信息可以在驅動運行之后被使用到。

      在這次USB驅動開發過程中,錯走許多冤枉路使我叫苦連天。我感受最深的是由于WinCE提供了通用串行總線驅動程序(USBD)模塊、USBD接口函數全集、樣本主機控制器驅動程序(HCD)模塊。所以,我們只需要根據USB設備硬件特性,利用USBD提供的不同函數,實現流接口函數與外圍設備的交互。在沒有特別的情況下,我最大的收獲經驗是把這些公用的源程序照搬過來,能極大的縮短開發周期,從而能更快速地進行嵌入式開發。

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区
    <cite id="gqusq"><tbody id="gqusq"></tbody></cite>
    <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <abbr id="gqusq"><rt id="gqusq"></rt></abbr>
  • <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <ul id="gqusq"></ul>
    <center id="gqusq"><noscript id="gqusq"></noscript></center>
  • 资源网第一页久久久| 国产成人亚洲欧美| 三区精品视频观看| 99re在线观看| 一本色道久久精品| 国模大胆一区二区三区| 日韩aⅴ视频一区二区三区| 国产欧美日韩综合精品二区| 中文一区在线| 亚洲精品看片| 在线日本成人| 精品白丝av| 欧美久久久久久| 一区二区精品国产| 亚洲午夜精品久久久久久浪潮| 国产综合动作在线观看| 99精彩视频| 91手机在线观看| 成人国产1314www色视频| 国产精品毛片| 午夜一区不卡| 久久一二三区| 91嫩草在线| 成人黄色在线免费观看| 国产99午夜精品一区二区三区| 久久国产99| 91入口在线观看| 国产精品三区在线| 麻豆成人在线播放| 无码免费一区二区三区免费播放 | 国产精品手机视频| 狠狠干一区二区| 欧美另类视频在线| 伊人久久青草| 精品福利av| 先锋影音久久久| 91久久极品少妇xxxxⅹ软件| 成人久久18免费网站漫画| 韩国成人一区| 亚洲精品国产精品久久| 在线视频一区观看| 在线日韩av| 免费久久久一本精品久久区 | 欧美不卡一区| 狠狠干成人综合网| 香蕉久久夜色精品国产| 国产精品对白刺激久久久| 久久精品99久久| 欧美一区二视频在线免费观看| 韩国在线视频一区| 久久婷婷麻豆| 日韩电影大全在线观看| 国产综合亚洲精品一区二| 亚洲欧美日韩综合国产aⅴ| 国产一区二区三区四区五区加勒比| 久久免费看av| 亚洲高清二区| 国产日韩一区欧美| 中文字幕一区二区三区在线乱码 | 精品一区久久久| 午夜精品一区二区在线观看 | 快播亚洲色图| 韩国久久久久| 国产精选在线观看91| 樱花www成人免费视频| 亚洲一区尤物| 日韩.欧美.亚洲| 国产精品日韩欧美一区二区| 国内一区二区在线视频观看| 欧美日韩精品久久| 成人欧美一区二区三区视频| 亚洲午夜精品一区二区| 国产一区二区高清| 日韩免费av电影| 亚洲一区亚洲| 欧美激情自拍| 大波视频国产精品久久| 亚洲成人中文| 日韩精品久久一区| 久久精品亚洲| 欧美va天堂在线| 久久久久久高清| 亚洲少妇诱惑| 欧美日韩在线高清| 国产视频精品网| 国产精品美女诱惑| 中文字幕精品—区二区日日骚| 岛国视频一区| 国产精品区二区三区日本| 水蜜桃亚洲一二三四在线| 91网免费观看| 一道本一区二区| 欧美日韩一视频区二区| 精品免费视频123区| 国产日韩精品视频一区二区三区| 亚洲成人一区二区三区| 国产一区视频观看| 91久久国产自产拍夜夜嗨| 99riav1国产精品视频| 你懂的视频一区二区| 欧美三日本三级少妇三99| 老司机免费视频久久| 国产三区二区一区久久| 午夜精品国产| 伊人久久大香线蕉综合75| 欧美成ee人免费视频| 国产精成人品localhost| 亚洲综合社区| 国内精品久久久久久久果冻传媒| 亚洲精品一区国产精品| 国产欧美日韩一区二区三区| av观看久久| 99视频国产精品免费观看| 久久大香伊蕉在人线观看热2| 伊人激情综合| 国产一区久久| 亚洲黄色三级| 亚洲国产日韩欧美一区二区三区| 欧美日韩在线精品一区二区三区| 国产精品福利视频| 国产亚洲精品自在久久| 成人综合电影| 精品无人区一区二区三区| 好吊妞www.84com只有这里才有精品| 不卡一卡2卡3卡4卡精品在| 国产不卡一区二区三区在线观看| 久久成人资源| 成人免费看片网站| 精品无码久久久久国产| 久久精品国产精品青草色艺| 久草精品电影| 亚洲欧美国产精品桃花| 一区二区三区我不卡| 欧美精品三区| 亚洲婷婷免费| 国产精品免费看| 91福利视频导航| 久久精品丝袜高跟鞋| 五月天色一区| 欧美日韩国产一区精品一区| 日韩视频一区| 99久热re在线精品视频| 欧美日韩亚洲一区二区三区在线观看 | 资源网第一页久久久| 欧美久久影院| 国产精品久久九九| 国产精品10p综合二区| 日韩激情视频| 极品尤物久久久av免费看| 久久国产99| 欧美日韩亚洲在线 | 韩国一区二区三区美女美女秀| 国产视频一区欧美| 亚洲一区网站| 久久久亚洲综合网站| 午夜精品免费| 99国产高清| 日韩资源av在线| 99亚洲视频| 国产精品久久精品视| 国产偷久久久精品专区| 国产私拍一区| 自拍另类欧美| 久久中文字幕一区二区三区| 日韩国产在线一区| 欧美亚洲免费| 日韩福利在线| 校园激情久久| 亚洲蜜桃av| 97视频资源在线观看| 天堂av一区二区| 羞羞视频在线观看欧美| 亚欧精品在线| 蜜乳av另类精品一区二区| 一区二区欧美日韩| av在线不卡一区| 欧美日韩在线不卡一区| 精品久久久久久一区| 亚洲成人资源| 日韩欧美在线一区二区| 美女诱惑一区| 精品91在线| 亚洲精品中字| 国产精品三区www17con| 一本久道久久久| 亚洲一卡二卡| 国产精品二区三区| 国产一区二区在线网站 | 欧美精品激情| 欧美黄色aaaa| 亚洲视频碰碰| 午夜综合激情| 久久天堂国产精品| 国产厕所精品在线观看| 精品久久久久久一区| 欧美日韩国产综合视频在线| 欧美日韩一区二区三区免费| 久久久久久精| 亚洲精品一区二区三区四区五区| 91日韩久久|