阅读:1475回复:7
如何在一个驱动里创建多个设 备?50分
具体的说,我有一块同步串口板,该片具有PCI 5920接口,用的芯片是16550,内部有4个串口通道,我想为它写一个win2000下的WDM驱动,希望驱动加载后,能为每个通道创建一个独立的设备,我用DS生成了一个驱动框架,在AddDevice里照DS生成的代码,创建了4个设备(每次m_Unit值加一),编译后加载驱动,在应用程序中能够打开4个设备,但只有与第一个设备才能正常交互,其他设备在调用DeviceIoControl时被挂起,不能正常返回。不知各位有没有遇到这样的问题,我该怎么做呢?都十来天了,真是急死了!!!
[编辑 - 6/28/03 by mao_feng_117] |
|
沙发#
发布于:2003-06-28 20:02
这样做可能不行吧,理由是:
系统在每发现一个新设备时(即总线驱动牧举后),才会调相应的功能驱动程序的AddDevice一次。 建议: 1。作为一个设备,内部用一个标志再作区分(各个通道),文件操作(DeviceIoControl)时也同样多用一个参数。这样实现起来比较简单。 2。或者做两个驱动,一个总线驱动,一个功能驱动。对每个通道牧举一次。这样结构很清晰。 |
|
|
板凳#
发布于:2003-06-28 20:43
Walt oney 的书上关于Multi Func的设备有比较好的例子,基本思想类似于上面那位大哥所说,但是结构上不同,建议好好看看。
|
|
地板#
发布于:2003-06-29 01:03
谢谢 两位 大哥!
gabrielyang 大哥,你是否可以把 Walt oney 的书上关于Multi Func的设备有比较好的例子---->通过 e-mail : 发给我。 我 现在 看的是 ----- 武安河,周利莉编著的《Windows2000/xp 设备驱动程序 WDM开发 含盘》, Chris Cant著的《Windows WDM设备驱动程序开发指南》, 没有 看 你 说的 Walt oney 的书。 jason.gao 大哥: 你如果 有 这方面的例子 也请你 ---->通过 e-mail : 发给我。 再次感谢 两位 大哥。 |
|
地下室#
发布于:2003-06-30 17:23
我认为不可以,以为WDM驱动是分层的,你在ADDDEVICE中可以加一个设备,但如和挂接下层驱动程序
|
|
5楼#
发布于:2003-07-02 18:45
可以在Toaster bus上枚举设备,基本上和Walter Oney的MultiFunc差不多
|
|
|
6楼#
发布于:2003-07-16 12:12
当然可以创建多个DO,甚至也可以创建“额外“的DO。比如你可以创建第5个DO(第一次进入AddDevice,甚至在DriverEntry中),专门和app通讯并负责管理另外4个do。
|
|
|
7楼#
发布于:2003-07-17 21:35
创建设备,无非是使之有个与其他程序通信的通道,同时,由于startdevice里面将分配资源,所以也是保存分配资源的好地方。你可以创建任意个设备,但是,系统只会对挂到设备栈上的device调用startsdevice,所以,创建设备肯定没问题,问题是你在处理io请求时是不是有其他问题,比方说资源问题。
|
|
|