利用DriverStudio32开发USB驱动程序

上传人:m**** 文档编号:150398730 上传时间:2022-09-09 格式:DOCX 页数:9 大小:554.86KB
收藏 版权申诉 举报 下载
利用DriverStudio32开发USB驱动程序_第1页
第1页 / 共9页
利用DriverStudio32开发USB驱动程序_第2页
第2页 / 共9页
利用DriverStudio32开发USB驱动程序_第3页
第3页 / 共9页
资源描述:

《利用DriverStudio32开发USB驱动程序》由会员分享,可在线阅读,更多相关《利用DriverStudio32开发USB驱动程序(9页珍藏版)》请在装配图网上搜索。

1、利用 DriverStudio3.2 开发 USB 驱动程序 2009-02-23 14:20版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明利用DriverStudio3.2开发USB驱动程序利用DriverStudio开发驱动程序比直接调用DDK开发起来要方便快捷的多。 就像利用MFC开发一般的桌面程序一样,而非选择SDK进行程序的编写。换句话 说,DriverStudio和DDK的关系就像MFC和SDK的关系一样,DriverStudio只 是对DDK中的各种结构、函数进行了封装,方便开发人员进行底层函数的调用, 如DriverStudio的Kirp类就是对DDK中IRP

2、所有操作的封装而已。下面简单介绍一下利用DriverStudio3.2开发一个USB驱动程序的步骤。这 个USB设备有3个双向端点,每个端点配置如下:EP 类型地址buffer(Bytes)0 IN/OUTControl 0x80/0x0016/161 IN/OUTBulk0x81/0x0164/642 IN/OUTBulk0x82/0x0264/64驱动程序需要实现功能就是控制设备上 LED 灯亮和灭,以及通过 Endpoint2 对设备进行读写。由于DriveStudio由几个部分组成,我们写这个驱动程序只要用到 DriverWork。在这里,我们假定读者已经正确安装了 DriverWor

3、ks,并且已经编 译了各个库文件(见本博客前面介绍内容)。1、启动 VC,从 VC IDE 菜单DriverStudio中选择DriverWizard,如图 1 所 示对话框中,写上项目名称。在这里,我们将这个项目称为:TEST,所在目录为D:TEST。然后点按钮Nex t;图12、在接下来这个对话框中(如图2),我们需要选择驱动程序类型。由于USB设备驱动程序是WDM类型,所以我们在的一个单选按钮中选择“WDMDriver” ;第 二个单选按钮是指所编写的驱动程序是否需要C+框架的支持,如选择该项,所 生成的驱动程序类被封装成驱动类和设备类两大类,否则驱动程序类以 DDK 形式 出现,通常选

4、择支持C+框架。点按钮Next 。图23、在接下来这个对话框中(如图3),我们需要选择驱动程序类型。由于USB设 备驱动程序是WDM类型,所以我们选择第二项并且点按钮Next 。图34、在第 4个对话框中(如图 4),选择我们驱动程序所操作总线类型。这里,我 们选择 USB。在 USB Vendor ID 和 USB Product ID 中填入 USB 设备 VID 和 PID。 假定我们USB设备VID和PID分别是16进制0471和1801。然后点按钮Next 。图45、在接下来对话框中(如 5),我们需要加入 Endpoint1 和 Endpoint2 定义。由 于在 USB 中规定

5、Endpoint0 是必须存在,所以我们不需要对 Endpoint 0 进行定 义。在生成的驱动程序设备类中 KusbLowerDevice 的实例 m_Lower 就代表了端点 0(Endpoint 0),可以通过 m_Lower 这个默认控制管道来控制 USB 设备,如配 置USB设备、传输各自控制和状态请求等。点Add.按钮,弹出如图5-1所示 对话框,分别添加Endpointl和Endpoint2的读写定义。其中,PipeName指端点 名称,不可重复;EndPoint Type指端点类型,可选为控制、批量、中断和同步 四种; EndPointAddress 指各端点的端点号,最大偏移

6、量为 15(协议规定, USB 设备具有除零端点以外最多15个端点),同一端点的输入和输出端点号地址是 一样的,范围从115。Transfer Direct指所定义的是输入端点还是输出端点; Maximun Packe t Size指所定义类型的端点一次能传输的最大包大小,控制和批 量端点为 8163264 字节,中断端点为 64 字节,同步端点为 1023 字节。此时,将 在设备类头文件种添加如下代码:KusbPipe EndPoint1IN;/ Pipe for USB endpoint address 81,type BULKKusbPipe EndPoint1OUT;/Pipe for

7、USB endpoint address 1, type BULK KusbPipe EndPoint2IN;/ Pipe for USB endpoint address 82,type BULKKusbPipe EndPoint2OUT;/Pipe forUSB endpoint address 2, type BULK 在设备类源文件种添加如下代码:/ Initialize each Pipe objectEndPoint1IN.Initialize(m_Lower, 81, 64); EndPoint1OUT.Initialize(m_Lower, 1, 64); EndPoint2I

8、N.Initialize(m_Lower, 82, 64); EndPoint2OUT.Initialize(m_Lower, 2, 64);从上述源代码中可以看出,每个输入端点的实际地址从0x81开始,每个输 出端点的实际地址从0x01开始逐个增加。例如,地址值为0x82的端点是一个端 点号为2的IN端点。具有接下来,继续按Next 按钮。图5OKCancel图 5-16、选择TRP处理类型。WDM驱动程序必须支持IRP_MJ_SYSTEM_CONTROL、 IRP_MJ_POWER 和 IRP_MJ_PNP。 IRP_MJ_CREATE、 IRP_MJ_READ、 IRP_MJ_WRITE

9、、 IRP_MJ_CLOSE、IRP_MJ_CLEANUP 或 IRP_MJ_DEVICE_CONTROL 处理应用程序和驱 动程序之间的通信工作。图67、选择 IO 端口的读写方式。IRP_MJ_READ 和 IRP_MJ_WRITE 后面的选项指应用程序用 ReadFile 或 WriteFile 与驱动程序进行数据传输时,驱动程序根据设备对象创建时的特征标 志位(DO_BUFFER_IO或DO_DIRECT_IO)来决定该如何获取应用程序的缓冲区地 址。当选择 Buffer Access 为 Buffered 时,设备对象创建时的特征标志位被设 为 DO_BUFFER_IO,驱动程序可分

10、别在 Kirp:BufferedReadDest 和 Kirp:BufferedWriteSource中获取到读写缓冲区的地址;当选择Buffer Access 为Direct时,设备对象创建时的特征标志位被设为DO_ DIRECT _IO,IO管理者 将锁定应用程序的数据缓冲区,并创建一个MDL,驱动程序可在Kirp:Mdl来获 取到读写缓冲区的地址。当应用程序用DeviceIoControl函数和驱动程序进行数据通信时,“Add” 等按钮用来定义 DeviceIoControl 的控制命令,即给驱动程序增加一些 IOCTL 接口。如图7-1所示。当选择Buffer Access为Buffe

11、red时,驱动程序通过 Kirp:IoctlBuffer来获取应用程序的输入、输出缓冲区;当选择Buffer Access 为 Direct 时驱动程序通过 Kirp:IoctlBuffer 来获取应用程序的输入缓冲区, 通过Kirp:Mdl来获获取应用程序的输出缓冲区。第三个选择指应用程序打开设备的方式:以符号连接名或GUID接口方式 (Interface)。图7图 7-18、在如图8所示对话框中,我们不需要创建任何注册表项,所以直接按Next 按钮。Step NoivigtitiDn1- Proiiect Mame2- Progect Tjpc3. Oliver Type)L Hardwa

12、e Bu5- U5E Rbsoijiws 6_ IRP Hardier7- I AHI fiLrRgiflU)9- Pmer10. WMI11. InxVaildlHiin12. Additional13. SJujinmsruAddRegisbyErttries:Fiixis-h I!N sme | Typc IR ool I Subkey I Value I 旳liable NmsAdd Rigi-bp FnhpAdd | 孚 | 字ete|图89、对WDM支持的电源管理选项进行选择。WDM驱动程序必须支持电源管理,电 源管理器使用IRP指示驱动程序来改变电源状态、等待并响应系统唤醒事件和

13、查 询驱动程序的设备。Slop Niavi gallon1. Picfccfi Name2. Pnofecl! Type3. D rivet Type*4” Haiidafe B-uis-5. USB Rc5Mircc4iCF IRP Handlers7. I/O8. R egisUy3. PdwciID. WMI11. Inllahorfi 1Z Additional13. SuminoiyNejrtFinish I CancelWdm drwers mu$l WMPpoit tower managefrert.Indwic I he level M suppoit for power mi

14、jnagcfrcrJ: lor Ihw device:【刁 Manage poK/er lor Ihs deviceI Enable waA/wate sup pail丨 Device lequres an irtush al powei al stailup Power device dwxn when idleIdle Timcoi/|mhtBack图910、WDM驱动程序可以支持WMI,用于管理计算机。图 10接下来的 Installation、Additional 和 Summary 三个选择对话框按默认方 式就可,入下图 11、图 12 和图 13 所示。这样,利用 DriverWi

15、zard 就创建了一个基本 USB 驱动程序框架。图 11图 12Step Nuvigulion1. Pioject Nlans2. PpoiccH Tjpe 3f Drivw百4. HaodiMaje5. USB ResourcetE. IRP Handlers7, I/OB. R 日giHiya. PtmerW. WMI11= InxIallalwKn12. Addihnah13. SumimaoRfajact Sunimciy Fm 更志卷Projccl Name - USBT csiRrojecl Ltx:diDzii= E:MyDiira別U弓EtTesf Ptqecl TjfljeWDMHarris心巳他READHandfe |RP_MJ_WRITEHndb IRP 阀 DEV1CE_CONTROL Driver T= FUNCTIDMALHaidre Bus wUSE:Haidware ID - U5eWID_1450SP1D_5S21Finish I Cattcel图 13

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!