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

ABB
關(guān)注中國自動化產(chǎn)業(yè)發(fā)展的先行者!
工業(yè)智能邊緣計算2025年會
CAIAC 2025
2025工業(yè)安全大會
OICT公益講堂
當前位置:首頁 >> 案例 >> 案例首頁

案例頻道

32位Windows操作系統(tǒng)下WDM型USB設(shè)備驅(qū)動程序設(shè)計
  • 企業(yè):控制網(wǎng)     領(lǐng)域:儀器儀表     行業(yè):市政工程    
  • 點擊數(shù):3248     發(fā)布時間:2005-05-11 14:59:26
  • 分享到:

 

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

2. USB簡介
    一個USB系統(tǒng)包括硬件系統(tǒng)和軟件系統(tǒng)。硬件系統(tǒng)包括:USB主控制器,根集線器(HUB),USB集線器(HUB),USB設(shè)備。軟件系統(tǒng)包括:USB類驅(qū)動程序,USB設(shè)備驅(qū)動程序,設(shè)備端固件程序和應(yīng)用程序。USB的通信結(jié)構(gòu)模型如圖1所示。

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

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

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

    WDM驅(qū)動程序總是使應(yīng)用程序調(diào)用設(shè)備時,就像操作一個文件。通常,當一個應(yīng)用程序需要從硬件端口讀取數(shù)據(jù)時,是通過調(diào)用標準的Windows API函數(shù),如ReadFile來實現(xiàn)的。而Win32子系統(tǒng)(如KERNEL32.DLL)通過調(diào)用平臺相關(guān)的系統(tǒng)服務(wù)接口實現(xiàn)該API,而平臺相關(guān)的系統(tǒng)服務(wù)將調(diào)用內(nèi)核模式支持例程。Windows 2000/xp的所有內(nèi)核模式IO操作都使用一個公用的數(shù)據(jù)結(jié)構(gòu)(IRP)。內(nèi)核發(fā)出各種IRP請求給WDM驅(qū)動程序,驅(qū)動程序處理各種IRP請求.每個IRP有一個IO堆棧結(jié)構(gòu),對應(yīng)相應(yīng)的驅(qū)動程序。

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

    USB總線驅(qū)動程序負責實際與USB總線通訊,加載和/卸載USB驅(qū)動程序;與USB設(shè)備通過端點建立通訊來執(zhí)行設(shè)備配置,數(shù)據(jù)與USB協(xié)議框架和打包格式的雙向轉(zhuǎn)換任務(wù)。USB設(shè)備驅(qū)動程序(即功能驅(qū)動程序),通過發(fā)送含有USB請求包(URB)的IRP_MJ_INTERNAL_DEVICE_CONTROL IRP給USB總線驅(qū)動程序來實現(xiàn)與USB設(shè)備的通訊。

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

4.1驅(qū)動程序初始化模塊
    該模塊提供一個驅(qū)動程序的入口例程DriverEntry(),所有對各種IRP的處理例程都在此模塊的DriverEntry例程中得到定義。此模塊添加設(shè)備AddDevice例程,調(diào)用IocreatDevice()內(nèi)核函數(shù)創(chuàng)建一個功能設(shè)備對象FDO,并進行WMI和電源管理的一些初始化工作。設(shè)備卸載例程UnLoad用于清理硬件在系統(tǒng)中留下的痕跡。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)模塊
    該模塊實現(xiàn)設(shè)備的即插即用功能,熱拔插和動態(tài)配置。當硬件檢測到USB設(shè)備插入時,Windows 2000查找相應(yīng)的驅(qū)動程序,并調(diào)用它的DriverEntry例程,即插即用管理器調(diào)用驅(qū)動程序的AddDevice例程,通知它添加設(shè)備,驅(qū)動利用IocreatDevice()內(nèi)核函數(shù)創(chuàng)建一個功能設(shè)備對象FDO,在此過程中驅(qū)動程序收到IRP_MN_START_DEVICE IRP,請求驅(qū)動程序啟動USB設(shè)備和分配資源。當然,設(shè)備運行過程中,如果設(shè)備狀態(tài)發(fā)生變化(如帶電拔插,暫停等),系統(tǒng)的即插即用管理器也同樣發(fā)出相應(yīng)的IRP,由驅(qū)動程序進行處理。

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

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

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

4.5 USB設(shè)備IO模塊
    本模塊實現(xiàn)完成IO請求的大部分工作。工作過程:應(yīng)用程序調(diào)用Win32函數(shù)如DeviceIoControl向設(shè)備發(fā)出IO控制命令,系統(tǒng)的IO 管理器構(gòu)造一個IRP IRP_MJ_DEVICE_CONTROL.設(shè)備驅(qū)動收到IRP,根據(jù)其中的控制代碼,構(gòu)造相應(yīng)的URB(USB請求塊),并把它放到一個新的IRP,傳遞到USB類驅(qū)動,執(zhí)行IRP。并把結(jié)果返回給設(shè)備驅(qū)動,設(shè)備驅(qū)動在通過IRP返回給IO管理器,IO管理器將結(jié)果返回給應(yīng)用程序,即完成一次IO操作。讀寫例程也安排在此模塊,響應(yīng)讀寫設(shè)備用戶請求。

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

   該模塊完成了幾乎所有的應(yīng)用程序與驅(qū)動程序的交互,這一部分也是與USB設(shè)備聯(lián)系最為緊密的部分。需要對USB協(xié)議有一定的了解。

5. 驅(qū)動程序的幾種開發(fā)工具
    開發(fā)一個USB驅(qū)動程序需要有一個合適的開發(fā)環(huán)境。下面是比較流行的幾種開發(fā)工具。

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

    DriverWorks是Numega公司提供的一個商業(yè)化驅(qū)動程序集成開發(fā)包,提供VC++下的開發(fā)向?qū)riverWizard,按照它的提示可以迅速地生成驅(qū)動程序的框架。在其生成的代碼框架中在加入自己的操作,就可以實現(xiàn)一個完整的USB設(shè)備驅(qū)動程序。

    WinDriver也是一個商業(yè)化的驅(qū)動程序開發(fā)包。WinDriver使硬件訪問變成一件很容易的事。在常規(guī)開發(fā)環(huán)境下,使用WinDriver,可以在很短的時間內(nèi)完成訪問IO端口和存儲區(qū)域,處理中斷,執(zhí)行DMA操作及訪問PCI和自定義寄存器的工作。這種易用性是通過一個非常強大的組合向?qū)韺崿F(xiàn)的。

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

熱點新聞

推薦產(chǎn)品

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



2.詳細的需求:
姓名:
單位:
電話:
郵件:
主站蜘蛛池模板: 老司机亚洲精品影院-老司机午夜在线视频-老司机午夜影院-老司机午夜网站-亚洲国产精品热久久2022-亚洲国产精品毛片∧v卡在线 | 亚洲 欧美 日韩 在线,97热久久免费频精品99国产成人,另类激情亚洲,久久99九九精品免费,久久综合精品国产一区二区三区,2020精品极品国产色在线观看 | 亚洲精品成人一区-亚洲精品成人网久久久久久-亚洲精品成人久久久影院-亚洲精品成人久久-黑人巨大白妞出浆-黑人巨大vs小早川怜子 欧美日韩亚洲无线码在线观看,国产成人亚洲综合91精品555,欧美成人国产,国产成人青青热久免费精品,亚洲欧美日韩色图,国产三级网站在线观看 | 国产精品视频你懂的-国产精品视频网-国产精品视频一区二区猎奇-国产精品视频一区二区三区-国产精品视频一区二区三区不-国产精品视频一区二区三区不卡 | 久久这里只有精品国产99-久久这里只有精品2-久久这里只有精品1-久久这里只精品热在线99-在线少女漫画-在线涩涩免费观看国产精品 国产精选一区二区-国产精选一区-国产精选污视频在线观看-国产精选91热在线观看-特级黄色视频毛片-特级黄色免费片 | 欧美日日操,日日爱网站,99久久久久久久,日本高清不卡免费,久久免费观看国产精品,秋霞在线观看视频一区二区三区 | 黄色片网站免费观看-黄色片网站观看-黄色片网站大全-黄色片视频网-色偷偷网址-色偷偷网站 | a级国产精品片在线观看-a级国产乱理伦片野外-a级国产乱理伦片在线观看a-a级国产乱理片在线观看-a级国产片-a级国产视频 | 天天噜噜色-天天看天天射天天视频-天天看天天射天天碰-天天看天天碰-国产成人高清-国产成人爱情动作片在线观看 | 精品在线视频播放-精品在线免费播放-精品在线观看一区-精品在线观看国产-亚洲 男人 天堂-亚州视频一区二区 | 亚洲专区中文字幕-亚洲专区在线视频-亚洲专区在线播放-亚洲专区在线-九九热在线免费视频-九九热在线免费观看 | 欧美夜夜骑,青草视频在线观看完整版,久久精品99无色码中文字幕,欧美日韩一区二区在线观看视频,欧美中文字幕在线视频,www.99精品 热久久国产-热99这里只有精品-热99这里有精品综合久久-热99在线观看-国产精品99久久久-国产精品99久久99久久久看片 | 精品国产亚一区二区三区,91久久精品国产一区二区,久久精品国产国产精品四凭,91午夜精品亚洲一区二区三区,精品在线看,国产视频资源在线观看 | 与子敌伦刺激对白亂輪亂性-与嫂子同居的日子在线观看-与邻居换娶妻子2在线观看-瑜伽牲交AV-久久久96-久久久91精品国产一区二区 | 国产又黄又爽又猛的免费视频播放-国产又黄又爽视频免费观看-国产又黄又湿又刺激不卡网站-国产又黄又a又潮娇喘视频-亚洲国产美女福利直播秀一区二区-亚洲国产乱码在线精品 | 韩国三级一区-韩国三级香港三级日本三级la-韩国三级香港三级日本三级-韩国三级视频网站-日韩欧美一及在线播放-日韩欧美一二三区 久久久久久久久国产-久久久久久久久97-久久久久久久国产视频-久久久久久久国产精品影院-午夜精-午夜寂寞院 | 国产福利视频在线观看福利-国产福利视频情侣视频-国产福利视频-国产福利美女福利视频免费看-国产鲁鲁视频在线播放-国产噜噜噜精品免费 | 成人久久久久-成人久久久-成人久久精品一区二区三区-成人久久18免费游戏网站-成人久久18免费网-成人久久18免费软件 | 伊人精品国产,久久久国产精品视频,国产1页,国产精品亚洲综合一区,国产成人高清亚洲一区91,久久久一区二区三区不卡 | 99re在线精品99re8热视频-99re在线精品-99re在线观看视频-99re在线观看-99re在线播放视频-99re在线 | 国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99 | 国产激情对白一区二区三区四-国产或人精品日本亚洲77美色-国产黄站-国产黄在线免费观看-日韩中文字幕网-日韩中文字幕视频在线观看 | 精品欧美小视频在线观看-精品欧美18videosex欧美-精品免费在线视频-精品免费视在线视频观看-亚洲视频区-亚洲视频欧美在线专区 | 久久久久久久久国产-久久久久久久久97-久久久久久久国产视频-久久久久久久国产精品影院-午夜精-午夜寂寞院 | 涩涩视频www在线观看入口-涩涩涩涩爱网站-涩涩免费网站-涩涩免费视频软件-高h gl肉文-港台三级大全 | 亚欧成人毛片一区二区三区四区-亚欧成人乱码一区二区-亚久久伊人精品青青草原2020-亚飞与亚基在线观看-国产综合成人观看在线-国产综合91天堂亚洲国产 | 91看片淫黄大片欧美看国产片-91看片在线观看-91蝌蚪91九色-91蝌蚪国产-91蝌蚪九色-91蝌蚪论坛 | 成人免费视频77777,精品国产福利,欧日韩一区二区三区,国产高清视频在线观看,欧美日韩1区,欧美一区二区三区在线观看 | 开心色99xxxx开心色-开心色99-开心久久婷婷综合中文字幕-开心 色 欧美 图-中文字幕人乱码中文-中文字幕人妻丰满熟女 | 香蕉网站男人网站-香蕉网站狼人久久五月亭亭-香蕉网在线视频-香蕉网在线观看-香蕉网伊-香蕉婷婷 中文有码中文字幕免费视频-中文有码视频-中文伊人-中文一区在线观看-欧美性综合-欧美性在线视频 | 久久只有这里有精品4-久久只这里是精品66-久久中精品中文-久久中文精品视频-久久中文骚妇内射-久久中文娱乐网 | 麻豆国产av国片精品有毛-麻豆国产av巨作-麻豆国产av巨作国产剧情-麻豆国产av丝袜白领传媒-麻豆国产av网站-麻豆国产av尤物网站尤物 | 精品国产91乱码一区二区三区,成人国产一区二区三区精品,亚洲一区免费在线观看,日韩在线一区二区三区免费视频,波多野吉衣在线观看,日韩一级精品久久久久 | 欧美精品久久久亚洲,欧美国产第一页,亚欧成人一区二区,久久精品一区二区影院,国产成人精品综合久久久,亚洲国产精品一区 | 国产精品高潮呻吟AV久久-国产精品高潮呻吟AV久久床戏-国产精品高潮呻吟AV久久动漫-国产精品高潮呻吟AV久久黄-国产精品高潮呻吟AV久久无码-国产精品高潮呻吟爱久久AV无码 | 人人澡人人爽人人精品-人人澡人人擦人人免费-人人在线碰碰视频免费-人人听力网mp3下载-俺也去最新地址-俺来也俺去也视频久久 | 欧美精品一区二区精品久久-欧美精品一二区-2019酷路泽大改款-欧美精品亚洲一区二区在线播放-99日韩-99人中文字幕亚洲区 | 亚洲乱伦熟女在线-亚洲精品国自产在线-亚州女人69内射少妇-亚州巨乳成人片-亚州激情视频-亚瑟在线中文影院 | 中文有码中文字幕免费视频-中文有码视频-中文伊人-中文一区在线观看-欧美性综合-欧美性在线视频 99re在线精品99re8热视频-99re在线精品-99re在线观看视频-99re在线观看-99re在线播放视频-99re在线 | 欧美中出,国产欧美又粗又猛又爽老,日本啊v,欧美日韩欧美,国产va在线观看,国产一区二区三区在线视频 | 国产精品亚洲精品日韩己满十八小-国产精品亚洲精品观看不卡-国产精品亚洲精品不卡-国产精品亚洲精品-四虎影视精品-四虎影视国产精品永久在线 |