mao_feng_117
驱动牛犊
驱动牛犊
  • 注册日期2003-06-25
  • 最后登录2015-07-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望66点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1475回复:7

如何在一个驱动里创建多个设 备?50分

楼主#
更多 发布于:2003-06-28 14:54
具体的说,我有一块同步串口板,该片具有PCI 5920接口,用的芯片是16550,内部有4个串口通道,我想为它写一个win2000下的WDM驱动,希望驱动加载后,能为每个通道创建一个独立的设备,我用DS生成了一个驱动框架,在AddDevice里照DS生成的代码,创建了4个设备(每次m_Unit值加一),编译后加载驱动,在应用程序中能够打开4个设备,但只有与第一个设备才能正常交互,其他设备在调用DeviceIoControl时被挂起,不能正常返回。不知各位有没有遇到这样的问题,我该怎么做呢?都十来天了,真是急死了!!!



[编辑 -  6/28/03 by  mao_feng_117]
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-28 20:02
这样做可能不行吧,理由是:

系统在每发现一个新设备时(即总线驱动牧举后),才会调相应的功能驱动程序的AddDevice一次。

建议:

1。作为一个设备,内部用一个标志再作区分(各个通道),文件操作(DeviceIoControl)时也同样多用一个参数。这样实现起来比较简单。

2。或者做两个驱动,一个总线驱动,一个功能驱动。对每个通道牧举一次。这样结构很清晰。
我打字很快。
gabrielyang
驱动牛犊
驱动牛犊
  • 注册日期2002-03-28
  • 最后登录2006-12-17
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-28 20:43
Walt oney 的书上关于Multi Func的设备有比较好的例子,基本思想类似于上面那位大哥所说,但是结构上不同,建议好好看看。
mao_feng_117
驱动牛犊
驱动牛犊
  • 注册日期2003-06-25
  • 最后登录2015-07-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望66点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于: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 : 发给我。

再次感谢 两位 大哥。
taosa
驱动牛犊
驱动牛犊
  • 注册日期2002-07-29
  • 最后登录2005-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-30 17:23
我认为不可以,以为WDM驱动是分层的,你在ADDDEVICE中可以加一个设备,但如和挂接下层驱动程序
danielxu22
驱动中牛
驱动中牛
  • 注册日期2002-11-22
  • 最后登录2014-03-24
  • 粉丝0
  • 关注1
  • 积分2分
  • 威望18点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-02 18:45
可以在Toaster bus上枚举设备,基本上和Walter Oney的MultiFunc差不多
今天我发现我家的金鱼淹死了,:(
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-16 12:12
当然可以创建多个DO,甚至也可以创建“额外“的DO。比如你可以创建第5个DO(第一次进入AddDevice,甚至在DriverEntry中),专门和app通讯并负责管理另外4个do。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-17 21:35
创建设备,无非是使之有个与其他程序通信的通道,同时,由于startdevice里面将分配资源,所以也是保存分配资源的好地方。你可以创建任意个设备,但是,系统只会对挂到设备栈上的device调用startsdevice,所以,创建设备肯定没问题,问题是你在处理io请求时是不是有其他问题,比方说资源问题。
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
游客

返回顶部