2012-04-04 48 views
0

有一个PCI设备,其中包含三个NIC,由Altera以太网核心提供。必须为NDX 5.1执行WinXPe。 MVP建议为每个内核实施WDM驱动程序,然后使用单个NDIS驱动程序与单个WDM驱动程序通信,但我不明白这一点,因为单个NDIS驱动程序似乎没有任何多个端口或通道的概念。WinXPe NDIS 5.1多端口

如果在DriverEntry NDIS驱动程序为每个以太网核心调用NdisMInitializeWrapper一次,该怎么办?它需要每次调用相同的DriverObject,但大概每次调用都会得到一个不同的NdisWrapperHandle。这个独特的NdisWrapperHandle可以用作调用所有其他NDIS驱动函数的上下文说明符。

回答

0

这是行不通的; NdisMInitializeWrapper只能为每个驱动程序调用一次。

规则是:您需要每个网络接口都有一个设备节点。因此,如果您需要3个以太网接口,则系统中需要3个设备节点。有几种方法可以实现:

  1. PCI总线将为每个PCI功能编号创建一个设备节点。如果您的PCI设备向总线提供3种功能,则Windows将枚举3个微型端口设备对象。这使得驾驶员变得非常简单。但是,显然,您必须能够重新调整硬件才能做到这一点。或者,如果您只有一个PCI设备具有一个PCI功能,那么您需要自己复用PCI枚举的设备节点。这意味着您应该创建自己的虚拟总线驱动程序(VBD)。 PCI总线枚举一个设备节点,它与您的VBD的驱动程序相关联。然后你的VBD转过身来枚举3个子节点,每个节点都与一个微型端口相关联。

    这种方法需要相当多的工作,因为现在您需要编写两个驱动程序。幸运的是,WDF可以为普通人编写一个公交车司机。您的VBD需要实现代码以共享子网络微型端口之间的资源(中断,配置空间)。

的大牌厂商都对自己是否选择了选项1或选项#2分开,这样既可以工作。从你的描述来看,这听起来像你已经得到了实施VBD的建议。