阅读:1305回复:2
请问USB设备驱动程序是怎么与总线驱动程序通信的?
USB设备驱动程序和固件我都学的差不多了,不知道是不是没有搞明白。我的想法是这样的:
设备驱动程序与总线驱动程序通信,总线驱动程序与固件通信。但是这2对具体怎么通信的,通过什么,有没有一套函数?我还是不明白,是不是对windows底层通信方式还要学习啊。底层和我的固件之间又是通过什么啊? 希望大虾们指导下我这个新手,谢谢! |
|
最新喜欢:![]() |
驱动小牛
![]() |
沙发#
发布于:2007-11-15 15:28
1 当PNP设备插入或拔出的时候,bus driver通过调用IoInvalidateDeviceRelations
通知 pnp manager 设备已发生变化 2 pnp管理器发送一个major function code是IRP_MJ_PNP,minor function code是IRP_MN_QUERY_DEVICE_RELATIONS的IRP给bus driver,以获得新的PDO列表, pnp manager获得新的列表之后可以知道哪个设备还没有初始化 3 pnp manager另外发送一个minor function code是IRP_MN_QUERY_ID的IRP 给 bus driver,以获得设备标志(device identifier) pnp manager利用device identifier在注册表里寻找hardware key,如果该设备是第一次插入bus,那么setup subsystem会在inf文件里找到安装段(install section), 安装并初始化驱动,最终,注册表里将创建相应的hardware key. 4 如果设备不是第一次插入bus,那么会在注册表里找到相应的hardware key, pnp manager调用driver的driverentry例程,接着调用adddevice通知设备的 一个实例已经创建。 |
驱动小牛
![]() |
板凳#
发布于:2007-11-15 15:37
5 接下来,会调用设备的DispatchPnp例程,一般最后都会调用IoCallDriver,从而回到Bus Driver的DispatchPnp例程处理完毕返回。5这个过程会反复调用多少次,不清楚。
|