阅读:7721回复:15
USB driver支持多个相同设备疑问
请教各位前辈。我想让我的driver支持多个完全相同的usb设备。 先在这个论坛上学习了一下,修改了driver的程序,主要就是在IoCreateDevice( ) 里给新加入的设备一个设备名,然后用IoCreateSymbolicLink ( ) 建立连接符号链接,每个设备的设备名跟符号链接都不一样。
问题是我插入第一个usb设备时一切正常,系统调用.sys文件,在我的application里也可以通过符号链接访问设备。再插入第二个,发现OS没有调用驱动程序,就是.sys文件没有运行,现象是DebugView等软件没有显示我源程序里的debug输出,softice在.sys文件里设断点也没有反映。另外,插入第二个设备后,操作系统提示安装driver,安装后在device manager里这个设备不能正常工作,图标上有黄色叹号。这个论坛里有前辈说.inf文件要写的规范,我想问问要实现我的目的(支持多个相同的设备),.inf 文件有什么要求吗? 先谢过大侠们! |
|
沙发#
发布于:2004-06-04 17:16
你这样做就可以了,我的都可以支持多个usb设备,我也是这样做的,应该和inf没什么关系,你再查查看驱动程序有什么问题
|
|
|
板凳#
发布于:2004-06-07 08:50
可是驱动程序根本没有被调用,这个怎么查呢?
|
|
地板#
发布于:2004-06-07 14:12
你用softice设断点是设在adddevice里的开头吗?
|
|
|
地下室#
发布于:2004-06-07 15:06
是,还有IoCreateDevice( )前....。还有DriverEntry里面我也加了,不过在插入第二个相同设备的时候,DriverEntry routine不会被调用,是吗?
|
|
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" |
|
|
6楼#
发布于:2004-06-08 00:46
不好意思,请教各位一个跟这个有关的问题:一个在2k底下可以工作的driver,是否在98ddk下编译一下,就可以在98下工作了!
|
|
7楼#
发布于:2004-06-08 08:39
98ddk编译过后,肯定是可以用的,不过好像2k下编译过的一般也直接可以在98下用,我有试过ddk里的usbbulk的例子,在2k下编译的,98下也是可用的
|
|
|
8楼#
发布于:2004-06-08 10:10
我试过了,这个驱动不能在98下工作,我查看设备状态,提示NTKERN无法加载驱动,不知道2k和98驱动有什么根本的区别!
|
|
9楼#
发布于:2004-06-08 14:52
larryhh,
试过了,不灵啊。我看了一下,这个跟我之前用的没什么本质差别。 我改了驱动的原代码,现在好点儿了,虽然还是不对,但是好歹进了我的DispatchPnP() routine了,而且好像是插上设备以后直接就进这个routine了,为啥啊。AddDevice( ) routine 还是没有被调用 :( [编辑 - 6/8/04 by parkat] |
|
10楼#
发布于:2004-06-08 15:30
对不住啊,这个inf被我改了一下,匆忙间可能有错误的地方,请原谅,不过里面你自己应该改一些,pid,vid什么的。
要不给出AddDevice的函数内容,我试试,或者把你的程序发给我调试一下,hong_email@sina.com |
|
|
11楼#
发布于:2004-06-09 08:59
客气客气。
我的source code直接拿ddk的bulkusb改的。我自己再试试吧。 |
|
12楼#
发布于:2004-06-09 15:04
建议你先拿没改动过的BULKUSB先试试多个设备,若是可以,你再查你的程序。要是不行,我建议你用98下的那个USBMASS的驱动里去改,我就从那改的,现在很好用
|
|
|
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两个程序发给你了,大侠有时间的话帮忙看看。多谢 |
|
14楼#
发布于:2004-06-10 08:31
我查看过BulkUSB的代码,觉得其中有一些问题,好像需要做一些改动,否则不稳定。
|
|
|
15楼#
发布于:2004-06-10 09:05
我把driverEntry 跟PnP两个程序发给你了 你是发到hong_email@sina.com吗,我还没收到。 USBMASS是什么? 就是用于98的那个usb mass storage设备的驱动程序 |
|
|