parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:7721回复:15

USB driver支持多个相同设备疑问

楼主#
更多 发布于:2004-06-04 11:58
请教各位前辈。我想让我的driver支持多个完全相同的usb设备。 先在这个论坛上学习了一下,修改了driver的程序,主要就是在IoCreateDevice( ) 里给新加入的设备一个设备名,然后用IoCreateSymbolicLink ( ) 建立连接符号链接,每个设备的设备名跟符号链接都不一样。
问题是我插入第一个usb设备时一切正常,系统调用.sys文件,在我的application里也可以通过符号链接访问设备。再插入第二个,发现OS没有调用驱动程序,就是.sys文件没有运行,现象是DebugView等软件没有显示我源程序里的debug输出,softice在.sys文件里设断点也没有反映。另外,插入第二个设备后,操作系统提示安装driver,安装后在device manager里这个设备不能正常工作,图标上有黄色叹号。这个论坛里有前辈说.inf文件要写的规范,我想问问要实现我的目的(支持多个相同的设备),.inf 文件有什么要求吗?
先谢过大侠们!
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-04 17:16
你这样做就可以了,我的都可以支持多个usb设备,我也是这样做的,应该和inf没什么关系,你再查查看驱动程序有什么问题
larry
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-07 08:50
可是驱动程序根本没有被调用,这个怎么查呢?
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-07 14:12
 你用softice设断点是设在adddevice里的开头吗?
larry
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-07 15:06
是,还有IoCreateDevice( )前....。还有DriverEntry里面我也加了,不过在插入第二个相同设备的时候,DriverEntry routine不会被调用,是吗?
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-07 16:20
一般说驱动都没有被调用的话,可能会与inf有关
试试下面这个

[Version]
Signature="$CHICAGO$"
Class=USB
provider=%MSFT%
DriverVer=11/11/2002,1.0.0.0
LayoutFile=layout.inf

[Manufacturer]
%MfgName%=Sample

[Sample]
%USB\Sample.DeviceDesc%=MDisk.install,USB\VID_ffff&PID_ffff

[DestinationDirs]
Sample.files = 10,System32\Drivers

[Sample.install]
CopyFiles=Sample.files
AddReg=Sample.addreg

[Sample.install.NT]
CopyFiles=Sample.files
AddReg=Sample.addreg

[Sample.install.NT.Services]
Addservice = Sample, 0x00000002, Sample_AddService

[Sample_AddService]
DisplayName    = %USB\Sample.DeviceDesc%
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
ServiceBinary  = %10%\System32\Drivers\Sample.sys
LoadOrderGroup = Base

[Sample.addreg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,Sample.SYS

[Sample.files]
Sample.sys

[SourceDisksNames]
1000 = "Sample Device",,,

[SourceDisksFiles]
Sample.SYS = 1000

;---------------------------------------------------------------;

[Strings]
MSFT="Sample"
MfgName="Sample"
USB\Sample.DeviceDesc="Sample Drive"
larry
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-08 00:46
不好意思,请教各位一个跟这个有关的问题:一个在2k底下可以工作的driver,是否在98ddk下编译一下,就可以在98下工作了!
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-08 08:39
98ddk编译过后,肯定是可以用的,不过好像2k下编译过的一般也直接可以在98下用,我有试过ddk里的usbbulk的例子,在2k下编译的,98下也是可用的
larry
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-08 10:10
我试过了,这个驱动不能在98下工作,我查看设备状态,提示NTKERN无法加载驱动,不知道2k和98驱动有什么根本的区别!
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-08 14:52
larryhh,
试过了,不灵啊。我看了一下,这个跟我之前用的没什么本质差别。
我改了驱动的原代码,现在好点儿了,虽然还是不对,但是好歹进了我的DispatchPnP() routine了,而且好像是插上设备以后直接就进这个routine了,为啥啊。AddDevice( ) routine 还是没有被调用 :(

[编辑 -  6/8/04 by  parkat]
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-08 15:30
对不住啊,这个inf被我改了一下,匆忙间可能有错误的地方,请原谅,不过里面你自己应该改一些,pid,vid什么的。
要不给出AddDevice的函数内容,我试试,或者把你的程序发给我调试一下,hong_email@sina.com
larry
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-06-09 08:59
客气客气。
我的source code直接拿ddk的bulkusb改的。我自己再试试吧。
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-09 15:04
建议你先拿没改动过的BULKUSB先试试多个设备,若是可以,你再查你的程序。要是不行,我建议你用98下的那个USBMASS的驱动里去改,我就从那改的,现在很好用
larry
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-09 17:55
多谢,试了bulkusb,还是不行,只能正常安装第一个设备。USBMASS是什么?在98ddk的例程里面吗?
现在我基本上知道是什么问题了。就是第二个设备插入后,正常情况下操作系统的PnP Manager 应该调用driver里的AddDevice routine,然后建立一个新的device object。可是我的驱动的AddDevice没被调用,而是PnP Manager直接发了一个IRP_MJ_PNP, 然后驱动就跑到我的DispatchPnP routine里了,在这个routine里,我设断点后,查了device object的地址,跟第一个设备一样,就是说还是插入第一个设备的时候系统建立的device object。
我把driverEntry 跟PnP两个程序发给你了,大侠有时间的话帮忙看看。多谢
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-06-10 08:31
我查看过BulkUSB的代码,觉得其中有一些问题,好像需要做一些改动,否则不稳定。
好好学习,天天向上,做一个乖宝宝。
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-06-10 09:05
 
我把driverEntry 跟PnP两个程序发给你了

你是发到hong_email@sina.com吗,我还没收到。
USBMASS是什么?

就是用于98的那个usb mass storage设备的驱动程序
larry
游客

返回顶部