转-USB驱动开发工具比较

最近想看看关于USB驱动开发的资料,有时间自己开发一个USB驱动.

USB驱动开发的主要工具:DDK(DDK是Device Development Kit,设备开发包的意思)、WinDriver、DriverStudio三种(不知道是否适合于其它驱动的开发)。

比较如下:

    用WinDriver和DriverStudio开发驱动比DDK简单容易上手,但WinDriver开发驱动没法脱离WinDriver环境不好发布,所以还是用DriverStudio比较好。

 

下面内容转自网络:

1 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原理和编程水平的人员来说,任务相当艰巨。

2 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个双向端点,每个端点的配置如下:
端点 类型 地址 缓冲区(字节) 0 IN/OUT 控制(Control) 0x80/0x00 16/16 1 IN/OUT 块(Bulk) 0x81/0x01 16/16 2 IN/OUT 块(Bulk) 0x82/0x02 64/64
  驱动程序需要实现的功能就是控制设备上的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灯的亮灭。代码如下:

NTSTATUS TESTDevice::TEST_IOCTL_LED_Handler(KIrp I)
{
 NTSTATUS status = STATUS_SUCCESS;

 t << "Entering TESTDevice::TEST_IOCTL_LED_Handler, " << I << EOL;
 // TODO: Verify that the input parameters are correct
 // If not, return STATUS_INVALID_PARAMETER
 if(I.IoctlOutputBufferSize()||!I.IoctlBuffer()||(I.IoctlInputBufferSizer()!=sizeof(UCHAR)))
  // TODO: Handle the the TEST_IOCTL_LED request, or
  // defer the processing of the IRP (i.e. by queuing) and set
  // status to STATUS_PENDING.
  PURB pUrb=m_Lower.BuildVendorRequest(NULL,//transfer buffer
   0, //transfer buffer size
   0, //request reserved bits
   (UCHAR)(*PUCHAR)I.IoctlBuffer()), //request. 1=LED_ON, 0=LED_OFF
   0 // Value
  );
  //transmit
  status=m_Lower.SubmitUrb(pUrb,NULL,Null,5000L);
 }
 // TODO: Assuming that the request was handled here. Set I.Information
 // to indicate how much data to copy back to the user.
 I.Information() = 0;
 I.Status()=status;
 return status;
}
  这个函数控制LED灯,它是通过USB Vendor Request来向设备传送的。其中request=1的时候表示让L ED亮,request=0的时候让LED来。它通过DeviceIoControl由上层应用程序传下来。
  现在,驱动程序完成了,为确保最后生成的USB驱动程序能编译成功,一定要注意设置DriverWorks中的Driver Build Setting(在VC++6.0的菜单中)中的[basedir]和[CPU]等项。设置好后,选择“Build/Batch Build”,在弹出的对话框中进行正确的选择,之后按下”Rebuild”按钮,稍等片刻即可生成最终的.sys驱动程序。
  结束语
  WDM作为一种设备驱动程序模型,自Windows 2000以来已成为一种统一的模式。同时USB技术得到广泛应用,进行USB设备驱动程序的开发成为必不可少的技术环节,而使用DriverWorks开发USB设备驱动程序,简单方便。

更多 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章概述...........................................................................................................................6 1.1 本教程的规划:...............................................................................................................6 第二章WDM驱动程序的运行.................................................................................................7 2.1 WDM驱动程序的基本调用流程:.....................................................................................7 2.1.1驱动程序何时从何处开始执行?........................................................................7 2.1.1.1第一次安装好驱动程序:................................................................7 2.1.1.2驱动程序正常运行:........................................................................7 2.1.2 DriverEntry()大约做些什么?.........................................................................7 2.1.2.1 IRP主功能码(Major Function Code).......................................9 2.1.2.2 IRP_MJ_PNP次功能码(Minor Function Code).......................10 2.1.2.3 IRP_MJ_POWER次功能码(Minor Function Code)...................10 2.1.3驱动程序与应用程序相关的功能码如何调用?..............................................10 2.1.3.1 DriverEntry()中您必须要注册回调函数...................................10 2.1.3.2 在您的应用程序中正确调用CreateFile().............................11 2.1.3.3 应用层调用驱动的消息参照:.....................................................11 2.1.3.4 IoControl调用:...........................................................................11 第三章开始编写WDM驱动程序...........................................................................................13 3.1 得到一个Demo工程:.....................................................................................................13 3.2 在VC下配置DDK的开发环境...........................................................................................15 3.2.1 我的目录.............................................................................................15 3.2.1.1我们应该在系统环境变量里设置..................................................15 3.2.2安装VC6................................................................................................17 3.2.3 打开wdm1\sys\Wdm1.dsp工作区文件...............................................18 3.2.4 修改H:\driverDev\MakeDrvr.bat文件...........................................18 3.2.5 设置VC的环境.....................................................................................19 3.2.5.1前面的内容编译时出了错误(配置'MakeDrvr')......................19 3.2.5.1.1 在project -> settings中设置成如下:.......................19 3.2.5.1.2 还可以在Tools-> Options-〉directories中选择“Executable files”并添加MakeDrvr.bat的目录即可.................20 3.2.5.1.3 再按F7编译 有编译提示..................................................20 3.2.5.1.4 搞清楚 MakeDrvr.BAT文件的功能...................................21 3.2.5.2前面的内容编译时出了错误,让我们看看是什么原因..............22 第四章 安装DebugPrintMonitor驱动程序.................................................................................24 4.1 用控制面板安装DebugPrintMonitor...........................................................................24 4.2 检查DebugPrint driver的安装情况...........................................................................29 第五章 安装wdm1驱动程序..........................................................................................................30 5.1 INF 文件.........................................................................................................................30 5.1 全新安装驱动.................................................................................................................30 5.1.1 安装驱动WDM1.SYS.............................................................................................30 5.2 测试DebugPrintMonitor...............................................................................................30 第六章 执行应用程序...................................................................................................................32 6.1 打开Wdm1Test.dsp.........................................................................................................32 6.2 编译Wdm1Test 工程.......................................................................................................32 6.3 修改Wdm1Test .CPP文件的setupapi.h的路径...........................................................33 6.3 重新指定Wdm1Test 工程的setupapi.lib的路径.......................................................35 6.4 类型DWORD_PTR和ULONG_PTR没定义的错误.................................................................36 6.4 调试WdmTest工程...........................................................................................................37 6.4.1 设置断点.............................................................................................................37 6.4.2 单步执行.............................................................................................................38 6.4.3 SYS目录下驱动程序代码对照:.......................................................................40 6.4.4 EXE中继续往下执行ReadFile/WriteFile.......................................................40 6.4.4.1 执行ReadFile的情况.............................................................................40 6.4.4.2 执行WriteFile的情况...........................................................................42 6.4.5其他的请自己执行..............................................................................................43 第七章 启用wdm1驱动程序..........................................................................................................44 第八章 停用wdm1驱动程序..........................................................................................................45 8.1 点击“我的电脑” –〉“属性” –〉“硬件”.........................................................45 8.2 点击 “设备管理器”并展开其他设备.......................................................................45 第九章还有更好的DebugView.exe.............................................................................................47 9.1得到DebugView.exe.........................................................................................................47 9.2 原理..................................................................................................................................48 9.2.1 DBG.......................................................................................................................48 9.2.2 DbgPrint().........................................................................................................48 9.2.3 如何使用DbgPrint()........................................................................................48 9.2.4 修改wdm1工程的例子........................................................................................48 9.3 如何使用DebugView.......................................................................................................48
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值