开发WDM型USB设备驱动程序

  • 格式:pdf
  • 大小:108.93 KB
  • 文档页数:2

开发WDM型USB设备驱动程序

USB设备驱动程序开发⼯具

开发USB设备驱动程序需要专门的开发⼯具,⽬前应⽤⼴泛的⼯具主要有两⼤类。

⼀类是Microsoft公司提供的Windows DDK(Device Driver Kit)。它有Windows 98 DDK 和Windows 2000 DDK两个版本。Windows 98 DDK能够开发Windows 95/98/Me/NT下的VxD、KMD和WDM驱动程序。Windows 2000 DDK 能够开发Windows 98/Me/NT/2000下的KMD和WDM驱动程序。由于DDK基于汇编语⾔的编程⽅式和内核模式的调⽤,对没有深厚的OS原理和编程⽔平的⼈员来说,任务相当艰巨。

另⼀类是NuMega公司提供的DriverStudio,它是⼀个⼤的开发⼯具包,包含VtoolsD、SoftICE和DriverWorks等开发⼯具。VtoolsD开发包提供了对VxD编程的C/C++类库⽀持,利⽤VtoolsD中的QuickVxD⼯具可以快速⽣成VxD的C/C++代码框架,开发者可以在此基础上根据各⾃的需要添加⾃⼰的代码。DriverWorks⽤于开发KMD和WDM驱动程序,并且对DDK函数进⾏了类的封装,从⽽为开发Windows NT、Windows 2000和Widnwos98 WDM设备驱动程序提供了⼀个⾃动化的⽅法。DriverWorks,提供了VC++下的开发向导Driver Wizard,按照它的提⽰可以迅速地⽣成驱动程序的框架。这个框架结构提供可以正确执⾏WDM动态环境中IRP的请求,⽽且,也包含⽤于简化系统提供的标准类驱动程序(如HID、流)和总线驱动程序(如PCI和USB)接⼝的类等。

总之,利⽤DriverWorks开发WDM驱动程序,可以⼤⼤简化开发⼈员的⼯作量、缩短开发周期以及降低开发驱动程序的难度。[1]

⽤DriverWorks开发WDM型USB设备驱动程序

要想使⽤DriverWorks,必须先安装以下软件:DriverStudio2.5,VisualStudio6.0,以及Windows2000DDK。由于DriverWorks所⽤的类库是对DDK的库函数的封装,还必须在Visual C++中编译需要的库⽂件[3],下⾯介绍怎样在VC环境中创建⾃⼰的库⽂件。(1) 启动Visual C++。

(2) 选择菜单File\Open Workspace。打开位于

DriverStudio\DriverWorks\Source\vdwlibs.dsw的⼯作空间⽂件。

(3) 选择菜单Build\Batch Build,在弹出的对话框架中选择你想编译的库。

(4) 点击对话框中的Build即可编译你选择的库。

下⾯就通过⼀个例⼦来说明利⽤DriverWorks开发USB设备驱动程序的⽅法。

这个USB设备有3个双向端点,每个端点的配置如下:

驱动程序需要实现的功能就是控制设备上的LED灯的亮和灭,以及通过端点2对设备进⾏读写。

(1)⾸先,通过快捷⽅式“Setup DDK and Start MSVC”来启动VC IDE。这个快捷⽅式所指向的程序,会进⾏⼀些必要的设置,然后再启动VC IDE,这样我们的程序就可以使⽤DDK和DW的头⽂件和库了。

(2)从VC IDE的菜单“DriverStudio”中选择“DriverWizard”,之后按对话框的提⽰填写项⽬名称及所在⽬录。并按向导选择驱动程序类型为WDM,总线类型为USB。

(3)按端点的配置表进⾏端点的设置。由于在USB中规定端点0是必须存在的,所以我们只需对端点1和端点2进⾏定义即可。

(4)选择端点2产⽣BULK Read及BULK Write 的代码,DriverWorks会⾃动产⽣对端点2的读写代码,不⽤修改,就可以直接使⽤。

(5)增加⼀个IOCTL来控制USB设备的LED灯。IOCTL代码名称取为TEST_IOCTL_LED,其他值默认。

(6)最后按下“ Finish”按钮,就结束了Wizard。

在此过程中只针对需要修改的步骤进⾏了说明,未加说明的部分均可直接按“Next”按钮。到此,我们已经创建好了⼀个基本的驱动程序,其中的块读写代码都由DriverWorks ⾃动⽣成,⽆需另外加代码,只有⼚商请求通过Ioctl来进⾏,控制LED灯的亮灭。代码如下:

这个函数控制LED灯,它是通过USB Vendor Request来向设备传送的。其中request =1的时候表⽰让L ED亮,request=0的时候让LED来。它通过DeviceIoControl由上层应⽤程序传下来。

现在,驱动程序完成了,为确保最后⽣成的USB驱动程序能编译成功,⼀定要注意设置DriverWorks中的Driver BuildSetting(在VC++6.0的菜单中)中的[basedir]和[CPU]等项。设置好后,选择“Build/Batch Build”,在弹出的对话框中进⾏正确的选择,之后按下”Rebuild”按钮,稍等⽚刻即可⽣成最终的.sys驱动程序。

结束语WDM作为⼀种设备驱动程序模型,⾃Windows 2000以来已成为⼀种统⼀的模式。同时USB技术得到⼴泛应⽤,进⾏USB设备驱动程序的开发成为必不可少的技术环节,⽽使⽤DriverWorks开发USB设备驱动程序,简单⽅便。