阅读:2911回复:7
关于周立功D12中WINDOWS XP驱动程序的修改
周立功D12开发板中带的WINDOWS XP驱动程序,在编译后会出现USB设备不能正常工作.
以下是修改的代码,修改后可以正常工作. 在d12.c和Ioctl.c中, // BUGBUG 82930 chokes if on the next command if you don't get // the entire descriptor on the first try siz = sizeof(USB_CONFIGURATION_DESCRIPTOR)+256; 将+256去掉,这个会引去枚举设备时,设备描述符的长度不对,修改后: siz = sizeof(USB_CONFIGURATION_DESCRIPTOR); 在d12.c中的D12_SelectInterface函数中, 设备查询完接口后有一段代码,也会引起驱动返回不对,需要屏蔽下面的代码 // Retrieve the selected Configuration and Interface setting from the // device. (The only purpose of doing this here is to exercise the // URB_FUNCTION_GET_CONFIGURATION and URB_FUNCTION_GET_INTERFACE // requests). // if (NT_SUCCESS(ntStatus)) { urb = ExAllocatePool( NonPagedPool, sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST) + 1); if (urb) { PUCHAR configuration; configuration = (PUCHAR)urb + sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST); *configuration = 0xFF; urb->UrbHeader.Function = URB_FUNCTION_GET_CONFIGURATION; urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST); urb->UrbControlGetConfigurationRequest.TransferBufferLength = 1; urb->UrbControlGetConfigurationRequest.TransferBuffer = configuration; urb->UrbControlGetConfigurationRequest.TransferBufferMDL = NULL; urb->UrbControlGetConfigurationRequest.UrbLink = NULL; ntStatus = D12_CallUSBD(DeviceObject, urb); D12_KdPrint (("D12TEST.SYS: Configuration %d (%x)\n", *configuration, ntStatus)); ExFreePool(urb); urb = NULL; } urb = ExAllocatePool( NonPagedPool, sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST) + 1); if (urb) { PUCHAR interface; interface = (PUCHAR)urb + sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST); *interface = 0xFF; urb->UrbHeader.Function = URB_FUNCTION_GET_INTERFACE; urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST); urb->UrbControlGetInterfaceRequest.TransferBufferLength = 1; urb->UrbControlGetInterfaceRequest.TransferBuffer = interface; urb->UrbControlGetInterfaceRequest.TransferBufferMDL = NULL; urb->UrbControlGetInterfaceRequest.UrbLink = NULL; urb->UrbControlGetInterfaceRequest.Interface = deviceExtension->Interface->InterfaceNumber; ntStatus = D12_CallUSBD(DeviceObject, urb); D12_KdPrint (("D12TEST.SYS: Interface %d (%x)\n", *interface, ntStatus)); ExFreePool(urb); urb = NULL; } } 修改上面两处后,USB可以正常使用了. 现在不清楚是否周立功故意在代码中留下这些地方. 习惯潜水,发现论坛上竟然有人要以此收费,实在不屑. 所以自己辛苦了几个晚上,将问题搞定,希望对大家有用 |
|
最新喜欢:r2109t... |
沙发#
发布于:2005-06-30 14:57
楼主是好人啊。顶一下。希望可以得到您的帮助,感觉您是个高手啊。MSN有吗?有问题想象你请教。驱动刚刚接触,希望希望。。。。。。。。。。。。。
|
|
|
板凳#
发布于:2005-07-14 17:58
楼主:
周立功并非故意.siz = sizeof(USB_CONFIGURATION_DESCRIPTOR)+256;可以说没有错.但要看的目标板的驱动程序.因目标板的连接程序判断配置描述长度大于描述总长时,发送除设备描述符以外的其它所有描述符.这时候,电脑发现有新硬件.当安装驱动程序时.目标板如上重发描述符一遍后,驱动才算安装完成(这是本人用超级终端监视出来的).仙林电子的也一样.可能你的目标板连接程序没有按周立功的写.但我用的驱动程序源代码是以前周立功C51板子的.在WINDOWS XP 的DDK环境下根本没法编译通过.楼主可否发你的一分驱动程序源代码给我tianrongcai@sohu.com.可否共同研究研究? |
|
地板#
发布于:2005-07-15 10:35
你可以去www.pudn.com上面有代码,其实按照我的方法改就可以了。改和不改,编译都是通过的,只是运行的时候有问题而已。
|
|
地下室#
发布于:2005-07-15 19:30
Thank you!我用WIN XP DDK的BULKUSB例子修改,并且对比了周立功的<<PDIUSBD12固件编程与驱动开发>>,代码完全一样(除了DEBUG打印),忙了两周.安装时,总是死机.接着用WINDOWS2000相同的例子,仅修改了INF和SOURCE文件.在WIN2K DDK下编译通过.安装成功,把插也正常,但设备管理内除D12外,还多了一行打问号的.安装时也提示找不到硬件.但桌面的USB图标把插正常.楼主能否告诉我是什么原因?
|
|
5楼#
发布于:2005-07-19 09:30
周立功D12的驱动程序确实头痛,我在Win2000下面编译后跑到GET_DESCRIPTOR就下不去了,经检查发现返回的错误信息是“无效的参数”,查了无数遍了实在看不出那个参数有问题了,有哪位大侠帮忙提示一下吧:(
|
|
6楼#
发布于:2005-07-19 18:56
周立功D12的驱动程序确实头痛,我在Win2000下面编译后跑到GET_DESCRIPTOR就下不去了,经检查发现返回的错误信息是“无效的参数”,查了无数遍了实在看不出那个参数有问题了,有哪位大侠帮忙提示一下吧:(
我试过了,而且已经修改成功.可以用EP1和EP2与PC通信.努力吧,小伙子!你做完后.你也会觉得周立功也属于骗人! |
|
7楼#
发布于:2007-10-26 13:09
thanks
|
|