原创 基于STM32的USB程序开发笔记(六)

2008-11-24 17:38 8772 13 8 分类: MCU/ 嵌入式
第六篇:XP下USB驱动开发的初步准备工作

必须的先决条件:
1:XP DDK(Driver Development Kits),可从MS网站下载。(Windows 2000下请使用Windows 2000 DDK),具备后安装DDK,如果你觉得只需要利用DDK就可以开发驱动,那么接下来的内容完全可以不看,在这讨论的是利用DriverStudio的DriverWinziard生成的驱动框架。因为纯粹利用DDK开发驱动将是项十分艰巨的工作,需要你了解太多的系统知识,开发全部基于C语言,而且底层驱动处理稍微不当,就容易让你系统直接挂了(WINDOWS著名的蓝屏)。DDK提供了一些驱动代码,有兴趣的朋友可以参考参考。
2:Compuware DriverStudio V3.2:Compuware出品,是进行驱动开发最常见的平台,他封装了大部分设备驱动所必须的基本框架,以C++形式生成VC6.0或者VS2002、2003、2005工程,用户一般只需要对该工程进行一些修改就可以完成最终目的。
3:代码开发环境VC6.0,这个大家都知道

安装了Windows XP DDK
点击开大图

安装了DriverStudio
点击开大图

之后,DriverStudio以插件形式嵌入到VC6:
点击开大图

这样,就可以进行驱动开发了,首先打开DriverWizard生成需要设计的驱动框架,以USB驱动为例需要特殊说明的是:
这里填写的Vendor ID和Product ID必须与USB设备固件程序里设备描述符里的Vendor ID和Product ID一致,这两个ID用以寻找配对的驱动。
点击开大图

这里添加的是USB端点特性,在生成的程序框架中,管道名称(Pipe Name)将作为程序的内部变量成员,派属KUsbPipe类,端点操作函数都集成在此类中。在这设置USB设备Enpoint 1为接收端口,Enpoint 2为发送端口。
点击开大图


这里添加USB的控制操作方式,在NT平台下应用程序控制设备只能通过ReadFile()/WriteFile()和DeviceIoControl()两做方式,执行ReadFile()/WriteFile()将响应IRP_MJ_READ/IRP_MJ_WRITE请求,在这添加了ReadFrom_EP2和WriteTo_EP1两个IRP_MJ_DEVICE_CONTROL请求代码,在执行DeviceIoControl()时,可以根据请求这两个请求代码进行区别,DriverWizard生成的框架中将增添两个函数:
NTSTATUS ezUSBDevice::ReadFrom_EP2_Handler(KIrp I);
NTSTATUS ezUSBDevice::WriteTo_EP1_Handler(KIrp I);
点击开大图

如果DriverStudio首次安装后,请先利用VC6打开\Compuware\DriverStudio\DriverWorks\source\VdwLibs.dsw工程,然后按照以下方法编译:VC6主菜单->Bulid->Batch Bulid,按图示设置后点击Rebuild All,编译成功后关闭此项目:
点击开大图

DriverWizard框架生成完成后,就可以在设定的路径下找到你设置的工程,至此就可以使用VC6打开工程。打开后请先打开VC6中DriverStudio插件:VC6主菜单->DriverStudio->DDK Build Settings,选择DDK目录:
点击开大图





至此就可以编译该工程了,如果提示找不到库:ntstrsafe.lib,请删除此库:
点击开大图

到此,对利用DriverStudio进行USB驱动开发的开发环境的设置做了一些着重的介绍,具体工程如出现一些特殊情况请利用网络资源收集,下篇将介绍USB应用程序与驱动之间的数据交换。


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条