版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、USB驱动程序的编写采用WDM 驱动程序。WDM 驱动程序是一些例程的集合,它们被动地存在,等待主机系统软件(PnP 管理器、I/O 管理器、电源管理器等)来调用或激活它们。具体驱动程序不同,其所包含的例程也不同。一个WDM 驱动程序的基本组成包括以下5个例程: (1)驱动程序入口例程:处理驱动程序的初始化。 (2)即插即用例程:处理PnP 设备的添加、删除和停止。 (3)分发例程:处理用户应用程序发出的各种 I/O 请求。 (4)电源管理例程:处理电源管理请求。 (5)卸载例程:处理驱动程序的卸载。 包含文件: ezusbsys.c, ezusbsys.h, ezusbsys.rc, res
2、ource.h, version.h, makefile,sources) 在ezusbsys.c文件中,包含了上述五个例程: ezusbsys.h中定义了各种数据结构还有各种IOCTL控制码,用于不同数据的读写。 Ezusbsys.c 中实现了各种驱动例程。包含了上述五个所说例程外还包含了其他例程,课程从下面的驱动程序入口例程得出一些信息。 驱动程序入口例程: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) NTSTATUS ntStatus = STATUS_SU
3、CCESS; PDEVICE_OBJECT deviceObject = NULL;DriverObject-MajorFunctionIRP_MJ_CREATE = Ezusb_Create; DriverObject-MajorFunctionIRP_MJ_CLOSE = Ezusb_Close;/分发例程 DriverObject-MajorFunctionIRP_MJ_DEVICE_CONTROL = Ezusb_ProcessIOCTL;/即插即用例程 DriverObject-MajorFunctionIRP_MJ_PNP = Ezusb_DispatchPnp;/电源管理例程 D
4、riverObject-MajorFunctionIRP_MJ_POWER = Ezusb_DispatchPower;/设备添加例程 DriverObject-DriverExtension-AddDevice = Ezusb_PnPAddDevice;/卸载例程 DriverObject-DriverUnload = Ezusb_Unload;return ntStatus; 在原有框架下,主要实现了的代码段在于ezusbsys.c文件中的如下例程:NTSTATUS Ezusb_Read_Write( IN PDEVICE_OBJECT fdo, IN PIRP Irp )在该例程中实现对
5、大数据块的读写控制和实现。具体实现代码在ezusbsys.c文件中。 编译生成驱动文件: 最用利用Windows 2000 DDK工具进行编译。 编译WDM程序的时候,有两个文件是必须要有的,它们是: 1、Makefile: 它的内容是: # # DO NOT EDIT THIS FILE! Edit .sources. If you want to add a new source # file to thiscomponent. This file merely indirects to the real make file # that is shared by all thedrive
6、r components of the Windows NT DDK # !INCLUDE $(NTMAKEENV)makefile.def 不要编辑这个文件。事实上每个WDM程序所需要的makefile的内容都是一样的,只需要简单地copy一个makefile到新的项目中就可以了 2、SourcesTARGETNAME=jtag_usb_1.0 TARGETTYPE=DRIVER DRIVERTYPE=WDM TARGETPATH=libINCLUDES=$(BASEDIR)inc; $(BASEDIR)incddk; TARGETLIBS=$(BASEDIR)lib*freeusbd.li
7、bSOURCES=ezusbsys.c resource.r这个文件指定了驱动程序目标名是jtag_usb_1.0.sys,是一个WDM驱动程序,生成的文件存放在lib目录中。值得注意的是,“=”前后不能有空格,否则编译的时候会出错。开始编译: “开始”-“程序”-“Development Kits”-“Windows 2000 DDK”-“Checked Build Environment”屏幕将显示:(有“回车”的那行是需要读者你亲自打进去的)New or updated MSVC detected. Updating DDK environment. Setting environmen
8、t for usingMicrosoft Visual C+ tools. Starting dirs creationCompleted. D:NTDDKcd jtag_usb (回车)D:HelloWDMbuild (回车) 如果源代码没有错误的话,生成的jtag_usb_1.0.sys将存放在lib目录中。 安装驱动程序: 利用INF文件实现驱动的安装。我们一般是采用INF文件,inf文件如下所示: jtag_usb.inf: Version Signature = $CHICAGO$ Class = USB DriverVer = 11/11/2007,1.00.00 ClassGUI
9、D =36FC9E60-C465-11CF-8056-444553540000 provider = %ECICT% SourceDisksNames 1=%CYUSB_INSTALL%, SourceDisksFiles jtag_usb_1.0.sys = 1 Manufacturer %MfgName%=ECICTEcict %VID_0547&PID_1002.DeviceDesc%=CyUsb, USBVID_0547&PID_1002 DestinationDirsCyUsb.Files.Ext = 10,System32Drivers CyUsb.HW AddReg=CyUsb.
10、AddReg.Guid CyUsb.NTCopyFiles=CyUsb.Files.Ext AddReg=CyUsb.AddReg CyUsb.NT.HW AddReg=CyUsb.AddReg.GuidCyUsb.NT.Services Addservice = CyUsb, 0x00000002, CyUsb.AddService CyUsb.AddServiceDisplayName = %CyUsb.SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ;SERVICE_DEMAND_START ErrorCont
11、rol = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%System32Driversjtag_usb_1.0.sys LoadOrderGroup = Base CyUsb.AddReg HKR,DevLoader,*ntkernHKR,NTMPDriver,jtag_usb_1.0.sys CyUsb.Files.Ext jtag_usb_1.0.sys CyUsb.AddReg.GuidHKR,DriverGUID,%CyUsb.GUID% ;-; Strings CYUSB_INSTALL = Your Device Installatio
12、n Disk ECICT = ECICT MfgName =ECICT VID_0547&PID_1002.DeviceDesc = USB_Jtag Controler ;-Replace GUID belowwith custom GUID-; CyUsb.GUID= 07BBF83D-D0B2-4915-870C-FC5B0B049DFC 准备好这个 jtag_usb.INF 文件后,插入控制器,然后跳出设备驱动安装的对话框。我想从列表选择硬件”-“其它设备”-“从磁盘安装”,选择 jtag_usb.INF 所在的路径,然后安装。当安装完成后,系统就会添加上你写好的驱动程序了
13、。(可以在“设备管理器”中查看到),这个驱动程序就投入使用。驱动程序与应用程序的接口对用户来说,所用的应用程序都通过I/O控制来访问设备驱动程序。用户的应用程序首先通过调用Win32函数CreateFile()来取得访问设备驱动的句柄。然后,用户程序使用Win32函数DeviceIoControl()来提交I/O控制码,并为 CreateFile 函数返回的设备句柄设置I/O缓冲区。下面的例程验证所获取的EZ-USB设备的句柄: HANDLE DeviceHandle; DeviceHandle=CreateFile( “.ezusb-0”, GENERIC_WRITE, FILE_SHARE
14、_WRITE, NULL, OPEN_EXISTING, 0, NULL); 随后,用户的应用程序通过调用Win32函数DeviceIoControl()来向设备驱动程序发送请求。下面显示的是DeviceIoControl()函数的原型。EZ-USB设备驱动程序IOCTL使用相同的函数参数名。 BOOL DeviceIoControl() HANDLE hDevice, /外设句柄 DWORD dwIoControlCode, /I/O操作控制代码 LPVOID lpInBuffer, /输入缓冲区指针 DWORD nInBufferSize, /输入缓冲区大小 LPVOID lpOutBuf
15、ferSize, /输出缓冲区指针 DWORD nOutBufferSize, /输出缓冲区大小 LPDWORD lpBytesReturned, /实际返回的字节数 LPOVRLAPPER lpOverLapper /用于异步操作的重叠指针 其中I/O操作控制代码是在USB设备驱动程序中定义和实施实际数据操作的,如在驱动程序中定义的:IOCTL_EZUSB_GET_DEVICE_DESCRIPTOR, IOCTL_EZUSB_BULK_READ, IOCTL_EZUSB_BULK_WRITE 等控制代码。 例如:(1)通过红色标注的ioctl控制码写入一个地址值。 /* VENDOR_OR_
16、CLASS_REQUEST_CONTROL myRequest; /在ezusbsys.h中定义的数据结构 ULONG nBytes; WORD pvBuffer1; /temp for data and addresspvBuffer0=Addr; /地址 /-写地址- myRequest.direction=0x00;/0-HOST T0 DEVICE,1-DEVICE TO HOST myRequest.requestType=2;/1-class,2-vendor myRequest.recepient=0;/0-device,1-interface,2-endpoint,3-ot h
17、er myRequest.request=0xb4; myRequest.value=0x00;/在这里不起作用 myRequest.index=0x00;DeviceIoControl (hDevice, IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST, /ioctl控制码 &myRequest, sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL), pvBuffer, 2, &nBytes, NULL); */(2)大块数据的写 /* BULK_TRANSFER_CONTROL bulkControl; / pipe type selected PWORD pDatabulkControl.pipeNum=0; /通道0用于写,通道1用于读。 pData=(PWORD)malloc(lenth*2);DeviceIoControl (hDevice, IOCTL_EZUSB_BULK_WRITE, /数据块的写IOCTL码 &bulkControl, sizeof(BULK_TRANSFER_CONTROL), pData, length*2, &nBytes, NULL); */(2)大块数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黔南布依族苗族自治州福泉市2025届四下数学期末检测试题含答案解析
- 2025广东深圳港引航站招聘持证引航员4人笔试历年常考点试题专练附带答案详解
- 2025年陕西煤业新型能源科技股份有限公司招聘(285人)笔试历年难易错考点试卷带答案解析
- 2025年谯城湖商村镇银行新工招聘(第二次)笔试历年典型考题及考点剖析附带答案详解
- 2025年甘肃省长城建设集团有限责任公司招聘35人笔试历年备考题库附带答案详解
- 2025年滨州无棣县中政土地产业集团有限公司及权属公司公开招聘工作人员和考察人员笔试历年典型考点题库附带答案详解
- 黑龙江省黑河市2025-2026学年四下数学期末达标检测试题(含答案)
- 英语国测3测试卷及答案
- 2026电商实验考试题及答案
- 2026电气控制考试题及答案
- 《云南省民用建筑信息模型监理应用标准》
- JG/T 413-2013建筑用集成吊顶
- 非煤矿山-矿山机电安全管理
- 2025年工程造价职业技能比武竞赛参考试题库500题(含答案)
- 《农药管理条例》知识培训
- BRCGS全球标准食品安全第9版标准要求
- 车间厂房租赁协议书范本
- DBJT 13-439-2023 福建省混凝土结构快速修复技术标准
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- JBT 1472-2023 泵用机械密封 (正式版)
- 商贸有限公司产品质量管理制度
评论
0/150
提交评论