类似pci桥与usb控制器连接的驱动实现的问题?

Windows内核调试

类似pci桥与usb控制器连接的驱动实现的问题?


zyq8709 2011-08-28, 11:58 上午
类似pci桥与usb控制器的连接有一些疑问:
1、如果给usb设备发送数据,应首先发到pci桥再通过pci总线发到usb控制器然后再通过usb总线发给usb设备。这里有个问题,在驱动程序中是将irp一直发到pci总线驱动的fdo上然后在让pci驱动传送,还是让irp发到usb控制器的fdo,然后通过usb控制器的fdo获得的pci配置空间信息直接IO到usb控制器上而不再让pci桥驱动处理?
2、还有一点就是,我在用devicetree观察PnP设备是发现,一般设备的pdo都是由堆栈下层设备的fdo创建,而且与fdo为同一个驱动对象,属于NextDevice关系,而非AttachedDevice关系。那这里就有一个问题了:如图的示例
USB设备 FDO
     |_____
           USB设备 PDO
               |____
                    USB Host FDO
                           |___
                               USB Host PDO
                                     |____
                                          PCI Bridge FDO
                                              |___
                                                  PCI Bridge PDO
此时如果设备发送一个IRP则向下传,但是USB设备的PDO StackSize为1且其无下层设备,那么最多IRP只可以传到此层,则USB设备的IRP就得不到有关的PCI信息了,无论是IRP_MN_START_DEVICE得不到有关的资源信息,还是IRP_MJ_WRITE也传不下去导致读写无法完成。例如USB设备插入运行产生IRP_MN_START_DEVICE,向下传送,到USB设备PDO,相当于USB Host FDO一层,本来应该再向下传获得PCI配置空间,然后让上层的USB设备得知,这样发送数据的话就会首先发送到相应的PCI总线位置上,然后再一步步转送。然而IRP_MN_START_DEVICE传不下去,USB设备也就得不到这些信息,那么也就不能传送数据了。但是事实上是解决了,请问各位老师windows到底是如何处理的?
多谢了!

Re: 类似pci桥与usb控制器连接的驱动实现的问题?


格蠹老雷 2011-09-07, 22:32 下午

IRP的处理原则是一旦有驱动报告完成此IRP,那么便不再继续向下传递了。具体一个IRP的处理过程首先和这个IRP的种类有关系,当然也与每个驱动的内部代码的动态逻辑相关,要具体对待了

建议用内核调试实际看一下,!drvobj xxx 7 列出驱动的回调函数,然后对感兴趣的设置断点...

Re: 类似pci桥与usb控制器连接的驱动实现的问题?


zyq8709 2011-09-08, 08:50 上午
多谢张老师的解答,我去做一下。

Powered by Community Server Powered by CnForums.Net