初学驱动,请教一个简单的PnP的概念问题

woshic8951   2009-12-9 09:58 楼主
WDF下在,在即插即用的设置结构WDF_PNPPOWER_EVENT_CALLBACKS中有一个属性:PNP_WDF_DEVICE_PREPARE_HARDWARE   EvtDevicePrepareHardware;

这个属性指定了在设备插上机器时,操作系统要调用的函数。

我的理解: 第一步必须要先安装驱动程序, 然后在操作系统启动的时候就要启动一个服务或者其他进程,打开安装的设备,这样EvtDevicePrepareHardware指定的函数才能调用。
这我就不解了,别的设备都是在使用的时候才打开,为什么PnP的设备驱动在一启动的时候就要打开?那不是浪费资源吗?

谢谢

回复评论 (12)

操作系统之所以能实现即插即用,根本原因是使用了中断!这就很容易理解为什么你插了U盘系统马上就能处理。其实在内核层面,是有一个线程一直在等待即插即用设备插拔的,要是没有这个处理线程,插上优盘也没有用的,所以这个PnP设备的驱动是必须系统启动的时候就要加载!
点赞  2009-12-9 12:53
上面提到的等待线程就是pnp设备驱动的一部分
点赞  2009-12-9 12:54
pnp不是你想象的那样的,他是有一个数据结构,在接到电平变化时,会触发PNP的例程,查找你的驱动。就象U盘一样,插进去,他的USB口会产生一个信号,然后开始寻找驱动。
点赞  2009-12-9 10:35
在最底层,设备插入后,应该是先产生一个中断,去执行相应的中断服务程序,中断服务程序就是驱动的一部分,然后再通知上层应用。
点赞  2009-12-9 11:49
引用: 引用 8 楼 wanyeye 的回复:
PNP 不是要实现的,你只要给定触发后的动作就可以了

这个是系统已经完成的,你有动作,,系统自动触发,,给你信号,,你根据信号类型,做相应动作就可以了

建议 看张帆的书 ,,讲的很详细


张帆的哪本书, 具体点,谢谢.
点赞  2009-12-17 23:45
引用: 引用 4 楼 arm9linuxpp 的回复:
操作系统之所以能实现即插即用,根本原因是使用了中断!这就很容易理解为什么你插了U盘系统马上就能处理。其实在内核层面,是有一个线程一直在等待即插即用设备插拔的,要是没有这个处理线程,插上优盘也没有用的,所以这个PnP设备的驱动是必须系统启动的时候就要加载!


基本就是楼上说的设计思路
点赞  2009-12-10 19:27
mark
点赞  2009-12-14 13:27
PNP 不是要实现的,你只要给定触发后的动作就可以了

这个是系统已经完成的,你有动作,,系统自动触发,,给你信号,,你根据信号类型,做相应动作就可以了

建议 看张帆的书 ,,讲的很详细
点赞  2009-12-15 16:22
4楼正解。
点赞  2009-12-17 17:55
嗯,大概是这么个意思,具体要去实践。
点赞  2009-12-18 09:23
帮你顶一下
点赞  2009-12-21 12:39
枚举设备由系统自动完成
点赞  2009-12-22 23:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复