網站導航:首頁開源項目 USB開源項目:Easy USB 51 Programer  

目錄導航

   
  1、項目簡介
USB開發基礎
1、USB接口的優點及開發難易度
2、USB設備的開發流程
3、USB接口芯片(USB控制器)的選擇
4、了解USB的通訊過程
5、USB命令(請求)和USB描述符
6、實例講解USB的枚舉(配置)過程
准備工作
1、需要哪些工具
2、電路原理圖
3、手工制作您的電路板
4、測試您的硬件
HID設備類
1、讓PC機找到我們的硬件
2、如何成爲一個HID設備(模擬鼠標)
3、如何成爲一個HID設備(模擬鍵盤)
4、如何與HID設備通訊(一)
5、如何與HID設備通訊(二)
6、51編程器的實現
Windows USB 驱动程序(自定义设备)
1、Windows驅動開發基礎
2、開發環境配置
3、第一个实例-Hello Wdm(一)
4、第一个实例-Hello Wdm(二)
5、真正的實例—驅動我們的實驗板
6、真正的實例—測試驅動程序
7、真正的實例—控制LED及讀取按鍵狀態
8、如何編寫應用程序
   

相关産品    淘寶網店
     
 

 
  更多...  
 
 
Windows驅動開發基礎 查看/参与此開源項目相关讨论
 

  Windows驱动程序的编写相对来说比较难一点,一般搞Windows 驱动都是专职人员来完成的。

1、 Windows驱动程序模型(WDM)

  Windows环境下驱动程序共有三类,一类是VxD( Virtual Device Driver,虚拟设备驱动程序),起源于Windows 3.1 时代,用于Windows 95/98/Me操作系统中;一类是KMD( Kernel Mode Driver,内核模式驱动程序),用于Windows NT下;还有一类就是WDM(Win32 Driver Mode,Win32驱动程序模型),是微软从Windows 98开始,推出的一个新的驱动类型,它是一个跨平台的驱动程序模型,不仅如此WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行,毫不夸张地讲,WDM算得上是21世纪的驱动程序框架。
编写上位机驱动程序最常的方法是用WDM(Windows Driver Model, Windows 驱动程序模型)。WDM采用分层驱动程序模型,对于USB设备来说,可分为USB总线驱动程序(USBD)和USB功能驱动程序。USB总线驱动程序由操作系统提供,它位于USB功能驱动程序的下面,负责与实际的硬件打交道,实现烦琐的底层通信。USB功能驱动程序由设备开发者编写,位于USB总线驱动程序的上面,不与实际的硬件打交道,而是通过向USB总线驱动程序发送URB(USB Request Block,USB请求块)的IRP(I/O Request Packet,I/O请求包),来实现对USB设备信息的发送或接收。

2、開發WDM類型驅動程序的常方法

  开发WDM驱动程序的方法三种,一种是利用微软提供的DDK驱动程序开发包,第二种是使用Compuware Numega公司的DriverStudio,第三种是使用KRF Tech公司的WinDriver。后两种给出驱动程序的框架,并对DDK中的一些操作进行封装,因此减少了开发时间,提高了效率—发速度方面,第一种最慢,第三种最快。普及程度方法,第一种和第二种用得比较多。
對于DDK與DriverStudio的優缺點在網上爭論了很久,我個人認爲這種爭論根本沒有必要,因爲它們之間的關系就好比MFC與SDK之間的關系一樣。DriverStudio只是對DDK中的相關函數進行封裝,讓程序設計者只關注相關功能部分的實現,節省開發時間而已。不管使用什麽工具,只要順手,符合我們的習慣就行。

3、 USB驱动程序的结构

  WDM體系結構實行分層處理,即設備驅動被分成了若幹層,典型地分成:高層驅動程序、中間層驅動程序、底層驅動程序。每層驅動再把I/O請求劃分成更簡單的請求,以傳給更下層的驅動執行。最底層的驅動程序在收到I/O請求後,通過硬件抽象層,與硬件發生作用,從而完成I/O請求工作。在這樣的架構下,上面的驅動層就不需要對每個操作系統都要開發一遍了。

  WDM还引入了功能设备对象FDO(Functional Device Object)与物理设备对象PDO(Physical Device Object)两个新类来描述硬件,一个PDO对应一个真实硬件。一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。

  USB驱动程序采用分层结构,位于上层的是USB设备驱动程序(或叫功能驱动程序Function Driver、用户驱动程序),负责创建FDO。总线驱动程序(Bus Driver)位于最底层,控制对总线上所有设备的访问,创建PDO代表发现的设备。

  與傳統PC總線(如PCI總線)設備的驅動程序相比,USB功能驅動程序從不直接與硬件對話。相反,它僅靠創建URB(USB請求塊)並將URB提交到總線驅動程序就可完成硬件操作。在應用程序與WDM驅動程序通信方面,系統爲每一個用戶請求打包形成一個I/O請求包(IRP)結構,將其發送至驅動程序,並通過識別IRP中PDO來區別是發送給哪一個設備的。

  NT驱动程序和一般的DOS/Windows C语言程序不一样,它没有main()或者WinMain()函数入口。和DLL类似地,它向操作系统显露一个名称为DriverEntry()的函数,在启动驱动程序的时候,操作系统将调用这个入口。DriverEntry除了做一些必要的设备初始化工作外,还初始化一些Dispatch例程入口。我们知道,NT应用和设备驱动程序打交道主要是通过CreateFile、 ReadFile、WriteFile 和DeviceIoControl等Win32 API来进行的。这些API其实都对应着驱动程序的一些Dispatch例程。而驱动程序除了DriverEntry以外,主要就是由这些Dispatch例程组成的。例如调用Win32 API CreateFile的时候,操作系统最终转化为对驱动程序IRP_MJ_CREATE功能代碼所对应的 Dispatch例程的调用,如果驱动程序没有提供该例程, CreateFile调用就会失败。

NT中一些常用的功能代碼和Win32 API的对象关系表

功能代碼

說明

IRP_MJ_CREATE

打開設備CreateFile

IRP_MJ_CLEANUP

在關閉設備時,取消挂起的I/O請求CloseHandle

IRP_MJ_CLOSE

關閉設備CloseHandle

IRP_MJ_READ

從設備獲得數據ReadFile

IRP_MJ_WRITE

向設備發送數據WriteFile

IRP_MJ_DEVICE_CONTROL

對用戶模式或內核模式客戶程序可用的控制操作DeviceIoControl

IRP_MJ_INTERNAL_DEVICE_CONTROL

只對內核模式客戶程序可用的控制操作

IRP_MJ_QUERY_INFORMATION

得到文件的長度GetFileLength

IRP_MJ_SET_INFORMATION

設置文件的長度SetFileLength

IRP_MJ_FLUSH_BUFFERS

寫輸出緩沖區或丟棄輸入緩沖區FlushFileBuffers、FlushConsoleInputBuffer、PurgeComm

IRP_MJ_SHUTDOWN

系統關閉InitialSystemShutdown

  DDK有很多驱动程序的例子,其中有一个bulkusb的例子,仔细看过之后,其实把它修改一下就可以变成自己设备的驱动,这也正是Microsoft推荐驱动设计者开发设备驱动程序的方法。DDK确实过于博大精深,我想,能够达到自己的设备驱动可以正常工作这个目的就可以了,没有必要搞清楚驱动程序设计中的每一个细节。 如果使用DriverStudio工具进行开发,DriverStudio不仅提供相当数量的实例,还可以利用它的DriverWizard向导生成驱动程序框架,此框架已经完成大部分设备枚举工作,方便设计人员将精力集中在功能的实现上面。

4、 与设备驱动程序相关的文件

  WDM類型的設備驅動程序擴展名爲SYS,同時還應該包括一個INF類型的文件。INF文件含有安裝一個WDM設備驅動程序需要的所有必要的信息,包括要複制的文件列表、要創建的注冊表項、設備的舊和兼容ID等。INF文件是一個文本文件,它由節組成,每一節從節名稱開始,後面是節內容。
当发现新的设备时(系统启动时,在安装热插拔设备时,或者从控制面板安装新设备时),就调用Windows的“添加新设备向导”执行这个向导扫描所有可用的INF文件,试图找到合适的驱动程序。Windows首先选择硬件ID匹配的设备的INF文件,否则它选择其兼容ID与设备ID最佳匹配的INF文件,若仍未找到提示用户选择驱动程序INF文件。然后根据INF文件的指令安装驱动程序,驱动程序可执行文件被复制到正确的位置,通常是indows\System32\Drivers目录,然后创建各种注册表项,驱动程序被装入内存,并执行它的DirverEntry例程,对新的设备调用AddDevice例程,给设备分配I/O、DMA、中断等资源(USB设备不需要分配资源),启动设备,然后正常的I/O操作就可以继续进行,使用后的INF文件复制到Windows INF子目录。

  利用DriverStudio提供的DriverWizard向導生成驅動程序框後會自動生成這個INF文件,所以您也可以不必過多關心INF文件的細節。

注:以上部分內容摘自互聯網
 

 
 
 
本站程序由百合電子工作室開發和維護
Copyright @ baihe electric studio
渝ICP備09006681號-4