日本在线www-日本在线播放一区-日本在线不卡免费视频一区-日本在线不卡视频-成人影院久久久久久影院-成人影院一区二区三区

ABB25年11月
關注中國自動化產業發展的先行者!
工業智能邊緣計算2025年會
2025工業安全大會
CAIAC 2025
OICT公益講堂
當前位置:首頁 >> 案例 >> 案例首頁

案例頻道

32位Windows操作系統下WDM型USB設備驅動程序設計
  • 企業:控制網     領域:儀器儀表     行業:市政工程    
  • 點擊數:3340     發布時間:2005-05-11 14:59:26
  • 分享到:

 

1. 前言
    通用串行總線(USB)是由Intel、Compaq、Microsoft、IBM、Northern Telecom和NEC等7家公司發起制定的微機總線接口規范。它充分解決了日益增加的PC外設與有限的主板插槽和接口之間的矛盾。現在幾乎所有的臺式PC和便攜式筆記本電腦都配備了USB接口,幾乎所有流行的操作系統如Win98,Windows2000/xp,Linux等都支持USB功能。由于目前多數的開發工具還沒有對USB進行控制的函數和控件,開發一個基于USB的應用系統(如基于USB的數據采集系統),就需要開發者自己寫一個USB設備驅動程序。

2. USB簡介
    一個USB系統包括硬件系統和軟件系統。硬件系統包括:USB主控制器,根集線器(HUB),USB集線器(HUB),USB設備。軟件系統包括:USB類驅動程序,USB設備驅動程序,設備端固件程序和應用程序。USB的通信結構模型如圖1所示。

USB具有以下特點:
1、 速度快。USB1 .1支持全速和低速模式:12Mbps和1.5Mbps,USB2.0支持的高速模式可達480Mbps。
2、 擴展方便。USB的星式的拓撲結構,在每個PC的USB端口最多擴展127個外設。
3、 支持完全的即插即用功能,可方便的熱拔插。
4、 可自動檢測外設并配置外設,靈活的供電方式,設備可自供電或總線供電;支持設備的掛起和喚醒,節省電源。
5、 USB有控制、等時、中斷和批量等四種數據傳輸方式。可滿足不同的外
設使用。

3. WDM驅動程序模型介紹
    WDM( Windows Driver Model),即Windows驅動程序模型,是Microsoft力推的全新驅動程序模式,旨在通過提供一種靈活的方式來簡化驅動程序的開發,在實現對新硬件支持的基礎上減少并降低所必須開發的驅動程序的數量和復雜性。

    WDM是一種PNP驅動程序,同時還遵循電源管理協議,它直接對硬件抽象層HAL操作,還能在Windows98和Windows2000間實現源碼級兼容。在WDM驅動程序模型中,每個硬件設備至少有兩個驅動程序。其一為功能(function)驅動程序,即硬件設備驅動程序。它了解使硬件工作的所有細節,負責初始化I/O操作,有責任處理I/O操作完成時所帶來的中斷事件,有責任為用戶提供一種設備適合的控制方式。另一個為總線(bus)驅動程序。它負責管理硬件與計算機的連接。WDM模型使用了如圖2的層次結構。

    WDM驅動程序總是使應用程序調用設備時,就像操作一個文件。通常,當一個應用程序需要從硬件端口讀取數據時,是通過調用標準的Windows API函數,如ReadFile來實現的。而Win32子系統(如KERNEL32.DLL)通過調用平臺相關的系統服務接口實現該API,而平臺相關的系統服務將調用內核模式支持例程。Windows 2000/xp的所有內核模式IO操作都使用一個公用的數據結構(IRP)。內核發出各種IRP請求給WDM驅動程序,驅動程序處理各種IRP請求.每個IRP有一個IO堆棧結構,對應相應的驅動程序。

4. USB設備驅動程序的編寫
    USB設備驅動程序完全具有WDM驅動程序的特點,也采用分層結構.USB設備驅動程序是使用標準Windows系統USB總線驅動程序訪問使用USBDI(驅動程序接口)的USB設備的設備驅動程序。圖3可以看到USB驅動的層次模型。

    USB總線驅動程序負責實際與USB總線通訊,加載和/卸載USB驅動程序;與USB設備通過端點建立通訊來執行設備配置,數據與USB協議框架和打包格式的雙向轉換任務。USB設備驅動程序(即功能驅動程序),通過發送含有USB請求包(URB)的IRP_MJ_INTERNAL_DEVICE_CONTROL IRP給USB總線驅動程序來實現與USB設備的通訊。

    USB設備驅動程序可按照處理IRP的不同分為:驅動程序初始化模塊、即插即用(PnP)IRP處理模塊、電源管理IRP處理模塊、系統控制模塊(WMI)IRP處理模塊,USB設備IO和讀寫IRP模塊等幾部分。

4.1驅動程序初始化模塊
    該模塊提供一個驅動程序的入口例程DriverEntry(),所有對各種IRP的處理例程都在此模塊的DriverEntry例程中得到定義。此模塊添加設備AddDevice例程,調用IocreatDevice()內核函數創建一個功能設備對象FDO,并進行WMI和電源管理的一些初始化工作。設備卸載例程UnLoad用于清理硬件在系統中留下的痕跡。DriverEntry例程部分源碼如下:
    NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
    {    PDEVICE_OBJECT deviceObject = NULL;
    ………
    DriverObject->MajorFunction[IRP_MJ_PNP] = D12_PnP;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= D12_IoCtrL;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = D12_Write;
    DriverObject->MajorFunction[IRP_MJ_POWER] = D12_PowerIrp;
    DriverObject->DriverExtension->AddDevice = D12_AddDevice;
    DriverObject->DriverUnload = D12_Unload;
    ………
    return ntStatus;}

4.2即插即用(PnP)模塊
    該模塊實現設備的即插即用功能,熱拔插和動態配置。當硬件檢測到USB設備插入時,Windows 2000查找相應的驅動程序,并調用它的DriverEntry例程,即插即用管理器調用驅動程序的AddDevice例程,通知它添加設備,驅動利用IocreatDevice()內核函數創建一個功能設備對象FDO,在此過程中驅動程序收到IRP_MN_START_DEVICE IRP,請求驅動程序啟動USB設備和分配資源。當然,設備運行過程中,如果設備狀態發生變化(如帶電拔插,暫停等),系統的即插即用管理器也同樣發出相應的IRP,由驅動程序進行處理。

    該模塊的啟動設備例程中要對USB設備進行初始化操作,它首先讀取設備描述符,根據設備描述符來讀取配置描述符.在讀取配置描述符時,往往先讀一次配置描述符,取出總的描述符長度,再將配置描述符,接口描述符,端點描述符一并讀出,從中獲取各種描述符提供的信息,設置管道信息,創建一個配置URB,進行設備配置。需要調用以下例程:
UsbBuildGetDescriptorRequest(Urb, //組建一個獲取設備描述符的URB請求
(USHORT)sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
0,0,deviceDescriptor//描述符的類型,NULL,siz,NULL);
CallUSBD(DeviceObject,urb);//發送usb給總線驅動,
interfaceDescriptor=USBD_ParseConfigurationDecriptorEx(//從配置描述符中搜索接口信息
           ConfigurationDecriptor,//配置描述符地址
           ConfigurationDesriptor,//搜索起始地址
           interfacedex,//搜索的接口索引
           0,-1,-1,-1)// 然后選擇接口,配置設備
urb=USBD_CreateConfigurationRequestEx(ConfigurationDescriptor,interfacelist)
//創建一個配置設備的URB。這里使用一個鏈表結構,可配置不只一個接口

4.3電源管理模塊
    實現USB系統的電源管理功能,實現設備的掛起與喚醒。在USB電源管理IRP的處理必須盡可能的快,否則可能出現奇怪的響應時間長現象。在電源管理模塊中將IRP向下傳遞的例程是PoCallDriver,用它的目的就是使一切和電源管理有關的IRP都在系統電源管理器的掌握之下。

4.4系統控制模塊(WMI)
    WMI(Windows Management Instrumentation)是Windows提供給驅動的一種服務機制,它可以完成注冊表的操作,并且可以在用戶應用程序和驅動程序之間直接數據交換,從而使用戶在除了使用IO設備控制之外,還有一個途徑和驅動程序交流。它處理IRP_MJ_SYSTEM_CONTROL IRP請求。此IRP在AddDevice中進行一些初始化工作,確定WMI請求處理的例程,并調用IoWMIRegistrationControl進行WMI注冊。

4.5 USB設備IO模塊
    本模塊實現完成IO請求的大部分工作。工作過程:應用程序調用Win32函數如DeviceIoControl向設備發出IO控制命令,系統的IO 管理器構造一個IRP IRP_MJ_DEVICE_CONTROL.設備驅動收到IRP,根據其中的控制代碼,構造相應的URB(USB請求塊),并把它放到一個新的IRP,傳遞到USB類驅動,執行IRP。并把結果返回給設備驅動,設備驅動在通過IRP返回給IO管理器,IO管理器將結果返回給應用程序,即完成一次IO操作。讀寫例程也安排在此模塊,響應讀寫設備用戶請求。

    USB有四種數據傳輸方式:控制,批量,中斷和同步方式。這里需要先檢查傳輸類型,然后根據傳輸類型的不同要求建立適當的URB請求,如下:
UsbBuildInterruptOrBulkTransferRequest(urb,
          sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER,
          PipeInformation->PipeHandle
          NULL,mdl,StageLenth,urbFlags,NULL)//建立傳輸請求URB
    利用總線驅動提供的內部控制碼IOCTL_INTERNAL_USB_SUBMIT_URB,向下層驅動發送URB,并設置完成例程等待請求完成:
nextStack->MajorFuntion=IRP_MJ_INTERNAL_DEVICE_CONTROL;//設置下一個IO堆棧的主
nextStack->parameters.Others.Argument1=(PVOID)urb;// 功能代碼
nextStack->Parameters.DeviceIoControl.IoControlCode=IOCTL_INTERNAL_USB_SUBMIT_URB;//內部控制USB設備提交的URB
IoSetCompletionRoution(Irp,
(PIO_COMPLETION_ROUTINE)BulkUsb_ReadWriteCompletion, //設置的完成例程
rwContext,TRUE,TRUE,TRUE);
IoCallDriver(deviceExtention->NextStackDeviceObject,Irp);//提交IRP

   該模塊完成了幾乎所有的應用程序與驅動程序的交互,這一部分也是與USB設備聯系最為緊密的部分。需要對USB協議有一定的了解。

5. 驅動程序的幾種開發工具
    開發一個USB驅動程序需要有一個合適的開發環境。下面是比較流行的幾種開發工具。

    Microsoft為開發驅動者提供了一個軟件包Driver Development Kit即DDK,其中包含了驅動程序的編譯器和調試工具,以及一些幫助文檔和范例,可以在Microsoft的網站上免費下載DDK。代碼的編寫采用c或C++語言,只是編譯,連接需要使用VC++和DDK的工具。DDK提供了各類驅程序的源代碼,對開發者編寫自己的驅動程序很有參考價值。

    DriverWorks是Numega公司提供的一個商業化驅動程序集成開發包,提供VC++下的開發向導DriverWizard,按照它的提示可以迅速地生成驅動程序的框架。在其生成的代碼框架中在加入自己的操作,就可以實現一個完整的USB設備驅動程序。

    WinDriver也是一個商業化的驅動程序開發包。WinDriver使硬件訪問變成一件很容易的事。在常規開發環境下,使用WinDriver,可以在很短的時間內完成訪問IO端口和存儲區域,處理中斷,執行DMA操作及訪問PCI和自定義寄存器的工作。這種易用性是通過一個非常強大的組合向導來實現的。

6. 結束語
    USB設備驅動程序提供了應用設備與應用軟件的接口,使應用程序能以文件調用的方式來高速,快捷地操作設備。通過設計USB設備驅動程序,我們實現了自己開發的智能儀器基于USB的數據采集系統與PC的通信,取得較好的效果。USB設備驅動程序是一個USB應用系統設計當中的關鍵環節,要想對USB開發有一個全面深入的理解,必須深入理解USB驅動程序設計。而且隨著USB技術的快速發展及其廣泛應用,USB驅動程序的編寫也將變得越來越重要。

熱點新聞

推薦產品

x
  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
四虎影视久久久免费| 久久99中文字幕| 久久久久久久男人的天堂| 久久国产一区二区| 中文字幕一区二区三区 精品| 青青青草影院 | 欧美一区二区三区性| 韩国三级香港三级日本三级| 久久99这里只有精品国产| 免费国产在线视频| 精品视频在线观看一区二区| 美女免费精品高清毛片在线视| 日韩av成人| 九九热精品免费观看| 日日日夜夜操| 中文字幕一区二区三区 精品| 韩国毛片免费大片| 久久99爰这里有精品国产| 999精品影视在线观看| 韩国三级香港三级日本三级| 久久99中文字幕久久| 国产网站免费观看| 国产一区二区精品久久91| 国产视频在线免费观看| 久久精品免视看国产成人2021| 黄视频网站在线观看| 精品视频在线观看一区二区三区| 黄色免费三级| 一级毛片视频在线观看| 麻豆系列 在线视频| 国产视频在线免费观看| 国产一区二区精品| 精品视频在线观看一区二区三区| 亚洲天堂在线播放| 国产一区二区精品久久91| 精品国产一区二区三区免费| 国产a免费观看| 中文字幕97| 青青久久精品| 国产视频网站在线观看| 欧美日本国产| 在线观看导航| 四虎影视久久久免费| 天天色色网| 色综合久久久久综合体桃花网| 日韩在线观看免费完整版视频| 日韩字幕在线| 精品视频在线观看视频免费视频| 国产网站免费在线观看| 久久国产影院| 一级女性大黄生活片免费| 天天做人人爱夜夜爽2020| 欧美激情一区二区三区在线| 国产激情视频在线观看| 黄视频网站在线观看| 欧美激情一区二区三区在线| 久草免费在线视频| 日韩女人做爰大片| 国产高清在线精品一区a| 人人干人人插| 999久久66久6只有精品| 国产a视频| 午夜激情视频在线播放| 国产不卡精品一区二区三区| 国产不卡在线观看| 国产伦久视频免费观看 视频| 国产不卡在线观看视频| 九九免费高清在线观看视频| 91麻豆精品国产综合久久久| 日韩男人天堂| 999精品在线| 免费国产一级特黄aa大片在线| 沈樵在线观看福利| a级黄色毛片免费播放视频| 黄色短视屏| 麻豆网站在线免费观看| 成人高清视频在线观看| 亚洲爆爽| 天天做人人爱夜夜爽2020| 亚洲爆爽| 九九久久国产精品大片| 日本免费乱人伦在线观看 | 国产一级生活片| 国产成人精品影视| 一a一级片| 国产91精品一区| 麻豆系列 在线视频| 午夜久久网| 国产网站免费在线观看| 精品国产三级a| 免费的黄色小视频| 天天色色网| 黄色免费三级| 欧美激情一区二区三区视频| 国产一区二区福利久久| 午夜欧美成人久久久久久| 亚洲不卡一区二区三区在线| 精品在线视频播放| 亚欧成人乱码一区二区| 国产伦精品一区二区三区在线观看 | 99久久精品国产高清一区二区 | 午夜在线亚洲| 青青久热| 中文字幕一区二区三区精彩视频| 国产伦理精品| 国产伦精品一区二区三区在线观看 | 精品国产一区二区三区久| 欧美激情在线精品video| 成人免费福利片在线观看| 午夜家庭影院| 韩国三级视频网站| 国产伦精品一区二区三区在线观看| 日韩专区亚洲综合久久| 日韩中文字幕在线亚洲一区| 精品视频在线看| 成人a大片在线观看| 91麻豆tv| 精品国产三级a| 韩国毛片 免费| 可以免费看污视频的网站| 欧美a免费| 香蕉视频亚洲一级| 欧美a免费| 午夜激情视频在线播放| 日本在线www| 九九国产| 精品美女| 你懂的日韩| 亚洲精品永久一区| 毛片高清| 国产亚洲精品aaa大片| 免费一级片在线| 美女免费精品高清毛片在线视| 国产麻豆精品hdvideoss| 久久成人性色生活片| 亚欧成人毛片一区二区三区四区| 91麻豆精品国产片在线观看| 青草国产在线| 欧美爱爱动态| 亚洲第一视频在线播放| 国产成人啪精品视频免费软件| 亚洲精品影院一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人免费网站久久久| 午夜在线亚洲| 97视频免费在线观看| 天堂网中文在线| 国产一区二区精品久久91| 超级乱淫黄漫画免费| 午夜在线影院| 精品国产一区二区三区久| 亚洲女初尝黑人巨高清在线观看| 欧美激情一区二区三区视频高清| 免费国产在线视频| 国产成人精品一区二区视频| 亚洲 欧美 成人日韩| 亚洲第一视频在线播放| 日韩专区第一页| 成人a级高清视频在线观看| 日韩在线观看免费| 国产美女在线观看| 青草国产在线观看| 亚洲第一页乱| 麻豆午夜视频| 日韩在线观看视频黄| 人人干人人插| 成人a大片在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 黄视频网站在线看| 国产国产人免费视频成69堂| 久久精品成人一区二区三区| 国产亚洲精品aaa大片| 美国一区二区三区| 麻豆午夜视频| 亚久久伊人精品青青草原2020| 成人免费观看的视频黄页| 成人在激情在线视频| 日日爽天天| 成人免费观看网欧美片| 精品视频在线看 | 九九干| 欧美一级视频免费观看| 中文字幕一区二区三区 精品| 高清一级片| 99久久精品费精品国产一区二区| 国产伦久视频免费观看 视频| 99久久网站| 色综合久久天天综线观看| 国产成人精品影视| 欧美激情中文字幕一区二区| 人人干人人插| 国产一区二区精品| 美国一区二区三区| 午夜精品国产自在现线拍| 美女免费毛片| 精品国产一区二区三区免费| 国产伦精品一区二区三区在线观看 | 精品久久久久久中文字幕一区| 欧美另类videosbestsex视频| 日韩综合|