petmoses
驱动牛犊
驱动牛犊
  • 注册日期2006-10-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分482分
  • 威望58点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
阅读:1221回复:2

请问USB设备驱动程序是怎么与总线驱动程序通信的?

楼主#
更多 发布于:2007-11-06 09:06
USB设备驱动程序和固件我都学的差不多了,不知道是不是没有搞明白。我的想法是这样的:
设备驱动程序与总线驱动程序通信,总线驱动程序与固件通信。但是这2对具体怎么通信的,通过什么,有没有一套函数?我还是不明白,是不是对windows底层通信方式还要学习啊。底层和我的固件之间又是通过什么啊?

希望大虾们指导下我这个新手,谢谢!

最新喜欢:

wsleewslee
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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通知设备的
一个实例已经创建。
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-15 15:37
5 接下来,会调用设备的DispatchPnp例程,一般最后都会调用IoCallDriver,从而回到Bus Driver的DispatchPnp例程处理完毕返回。5这个过程会反复调用多少次,不清楚。
游客

返回顶部