图 1一块USB主控制器卡(主控芯片为VIA VL805)
图中的板卡包含USB主控制器(USB Host Controller)、USB集线器(USB Hub),这里USB集线器扩展了4个USB端口(USB Port)。
PCI总线(由于PCIE总线与PCI总线软件兼容,故软件层面只讨论PCI总线)、USB主控制器、USB集线器均为总线设备(Bus Device),驱动它们的驱动程序称为总线驱动程序(Bus Driver),由微软Windows操作系统提供。
驱动PCI总线的程序为PCI总线驱动程序(由微软提供),PCI总线驱动程序包含了一个PDO和FDO,PDO由根总线驱动程序(The root bus driver,由微软提供)创建,FDO由PCI总线驱动程序创建。PCI总线驱动程序的设备栈如下图所示:
图 2PCI总线驱动程序的设备栈
当驱动程序处理PnP或电源IRP时,它们必须将每个IRP沿着设备栈一路传递到PDO及其相关的总线驱动程序。
总之,
- 根总线驱动程序为PCI总线创建PDO,PCI总线驱动程序创建代表自身的FDO,并将此FDO附加到根总线驱动程序创建的PDO之上;
- PCI总线驱动程序枚举插入到PCI总线上的设备,为这些设备创建PDO,PCI总线上的设备驱动程序创建代表自身的FDO,并将此FDO附加到PCI总线驱动程序创建的PDO之上。