阅读:4129回复:7
有谁熟悉PNP的,如何在驱动中实现?
要实现PCI设备的PNP,该如何做?
|
|
沙发#
发布于:2005-03-03 11:32
wdm驱动中PNP实现枚举由总线驱动和pnpmanager共同完成。
PCI设备的发现删除等有PCI.SYS做了,你要做的就是实现IRP_MJ_PNP的dispatch function,在各个IRP_MN_中实现你的资源分配释放等动作。 具体枚举过程可以参照toaster例子,同时结合win2k源码的pnpenum.c文件。 |
|
板凳#
发布于:2001-04-26 18:45
WDM本身就是基于PNP的。IRP_MJ_PNP有很多minor irp,driver要处理这些minor irp。
|
|
|
地板#
发布于:2001-04-24 21:31
ZENGHAO似乎已经忘记了他的问题了。咱们在这里讨论得这么热闹。
|
|
地下室#
发布于: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:测试设备是否可以移除。 |
|
5楼#
发布于:2001-04-08 21:59
市面上有本写设备驱动的书,是工业出版社的
名字是《Windows WDM 设备驱动程序开发指南》 56 rmb,是专门对pnp和USB有详细介绍的, 建议你看看。 |
|
6楼#
发布于:2001-04-07 14:51
问题和答案都抽象得令人打哈欠。不能问得具体一些吗?又不是在论文答辩。
|
|
7楼#
发布于:2001-04-03 07:09
在pci的bios设置最基本的标识,以便在设备枚举时驱动的识别。当然后者pnp功能中定义设置的。ddk中有pnp实现代码,可以参考。
|
|