WinXPe NDIS 5.1 Multiport



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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新