0

拥有一个包含三个 NIC 的 PCI 设备,由 Altera 以太网内核提供。因此必须为 WinXPe 实施 NDIS 5.1。MVP 建议为每个内核实现一个 WDM 驱动程序,然后是一个与各个 WDM 驱动程序对话的单个 NDIS 驱动程序,我不明白,因为单个 NDIS 驱动程序似乎没有任何多端口或通道的概念。

如果在 DriverEntry 中,NDIS 驱动程序为每个以太网核心调用一次 NdisMInitializeWrapper 会怎样?它每次都需要使用相同的 DriverObject 进行调用,但可能会在每次调用时返回不同的 NdisWrapperHandle。这个独特的 NdisWrapperHandle 可以用作调用所有其他 NDIS 驱动程序函数的上下文说明符。

4

1 回答 1

1

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

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

  1. PCI 总线将为每个 PCI 功能编号创建一个设备节点。如果您的 PCI 设备向总线公开 3 个功能,则 Windows 将枚举 3 个微型端口设备对象。这使驱动程序超级简单。但是,显然,您必须能够重新调整硬件才能做到这一点。

  2. 或者,如果您只使用具有一种 PCI 功能的 PCI 设备,那么您需要自己多路复用 PCI 枚举的设备节点。这意味着您应该创建自己的虚拟总线驱动程序 (VBD)。PCI 总线枚举一个设备节点,该节点与您的 VBD 的驱动程序相关联。然后您的 VBD 转身枚举 3 个子节点,每个子节点都与一个微型端口相关联。

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

大牌供应商在选择选项 #1 还是选项 #2 上存在分歧,因此两者都可以工作。根据您的描述,听起来您已经获得了实施 VBD 的建议。

于 2012-04-05T05:38:16.497 回答