zenghao
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4110回复:7

有谁熟悉PNP的,如何在驱动中实现?

楼主#
更多 发布于:2001-04-02 22:36
要实现PCI设备的PNP,该如何做?
bjcjg
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2005-08-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-04-03 07:09
在pci的bios设置最基本的标识,以便在设备枚举时驱动的识别。当然后者pnp功能中定义设置的。ddk中有pnp实现代码,可以参考。
cxf
cxf
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2002-02-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-04-07 14:51
问题和答案都抽象得令人打哈欠。不能问得具体一些吗?又不是在论文答辩。
cybercat
驱动牛犊
驱动牛犊
  • 注册日期2001-03-27
  • 最后登录2005-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-04-08 21:59
市面上有本写设备驱动的书,是工业出版社的
名字是《Windows WDM 设备驱动程序开发指南》
56 rmb,是专门对pnp和USB有详细介绍的,
建议你看看。
Rick
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-04-24 16:23
在VxD的情况下,PnPDriver是这样的,WDM的情况我不太了解。
在PnP中有三个部分比较起着重要作用,他们是Configuration Manager(配置管理器),Enumberator(枚举器),Arbitrator(资源仲裁器)。每一种Bus都有其相应的Enumberator,如ISA Enumberator,PCI Enumberator,SCSI enumberator等等,分别负责查找相应总线上的设备。
Configuration Manager首先调用Enumberator查找系统中的设备并构造Hardware Tree,然后Configratoin Manager依据设备在Registry的DevLoader的设定,装载相应的设备驱动程序中,结果Driver收到Sys_Dynamic_Device_Init消息,PNP类型的Driver不应该在此时安装中断及端口陷阱处理程序,因为此时,系统还未给设备分配资源。
当设备的Driver被转载时还会收到系统发送的PNP_NEW_DEVNODE消息,并在参数中说明具体的原因:DL_LOAD_DEVLOADER,DL_LOAD_DRIVER,或DL_LOAD_ENUMBERATOR.
1.当系统装载DevLoader中指定的DriverLoader时,会向他发送这个消息并指出DL_LOAD_DEVLOADER.
2.当LoadDriver装载设备的Driver时,会向设备的Driver发送这个消息并指出DL_LOAD_DRIVER。
3.DL_LOAD_ENUMBERATOR我也不是很清楚。
如果DriverLoader就是设备Driver本身,则只回收到DL_LOAD_DEVLOADER这个消息。
在这个时候PnP Driver要调用CONFIGMG_Register_Device_Driver来注册一个CallBack函数。这个Callback函数负责对设备进行配置。系统在调用Arbitrator之后为每一个设备调用这个CALLBACK函数。函数原型是这样的:CONFIGRET CM_HANDLER CALLBACKFUNNAME(CONFIGFUN cf,SUBCONFIGFUNC scf,DEVNODE node,DWORD dwRefData,ULONG ulFlags);
cf的值可能为:CONFIG_START,表示可以使用分配的资源。这是可以调用CM_GET_Alloc_Log_Conf函数来获得系统分配的资源,并根据这些资源进行相关的初始化动作。
CONFIG_STOP:表明停止使用设备。
CONFIG_REMOVE:表明设备已经移除。做一些清除工作。
CONFIG_TEST:测试设备是否可以移除。




cxf
cxf
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2002-02-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-04-24 21:31
ZENGHAO似乎已经忘记了他的问题了。咱们在这里讨论得这么热闹。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-04-26 18:45
WDM本身就是基于PNP的。IRP_MJ_PNP有很多minor irp,driver要处理这些minor irp。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
rhino
驱动牛犊
驱动牛犊
  • 注册日期2001-12-28
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分73分
  • 威望27点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-03 11:32
wdm驱动中PNP实现枚举由总线驱动和pnpmanager共同完成。
PCI设备的发现删除等有PCI.SYS做了,你要做的就是实现IRP_MJ_PNP的dispatch function,在各个IRP_MN_中实现你的资源分配释放等动作。
具体枚举过程可以参照toaster例子,同时结合win2k源码的pnpenum.c文件。
游客

返回顶部