2012-04-04 3 views
0

Имейте одно PCI-устройство, которое содержит три сетевых адаптера, любезно предоставленных ядрами Altera Ethernet. Необходимо реализовать для WinXPe, таким образом, NDIS 5.1. MVP предложили внедрить драйвер WDM для каждого ядра, а затем один драйвер NDIS, который говорит с отдельными драйверами WDM, что я не понимаю, учитывая, что один драйвер NDIS не имеет понятия о нескольких портах или каналах.WinXPe NDIS 5.1 Multiport

Что делать, если на DriverEntry драйвер NDIS называется NdisMInitializeWrapper один раз для каждого ядра ethernet? Он должен будет каждый раз звонить с одним и тем же драйвером, но, по-видимому, с каждым вызовом будет возвращаться другой NdisWrapperHandle. Этот уникальный NdisWrapperHandle можно использовать в качестве спецификатора контекста для вызовов ко всем другим функциям драйвера NDIS.

ответ

0

Это не сработает; NdisMInitializeWrapper можно вызывать только один раз для каждого драйвера.

Правило: вам необходимо иметь один узел устройства для сетевого интерфейса. Поэтому, если вам нужны 3 Ethernet-интерфейса, вам понадобится 3 устройства в системе. Есть несколько способов добраться туда:

  1. Шина PCI создаст узел устройства для каждого номера функции PCI. Если ваше устройство PCI предоставляет три функции для шины, тогда Windows будет перечислять 3 объекта устройства минипорта. Это делает драйвер супер простым. Но, очевидно, вы должны иметь возможность перезагрузить оборудование для этого.

  2. В качестве альтернативы, если вы застряли только с одним PCI-устройством с одной PCI-функцией, вам необходимо мультиплексировать узел с PCI-перечислением самостоятельно. Это означает, что вы должны создать свой собственный драйвер виртуальной шины (VBD). Шина PCI перечисляет один узел устройства, который связан с драйвером для вашего VBD. Затем ваш VBD оборачивается и перечисляет 3 дочерних узла, каждый из которых связан с минипортом.

    Этот подход требует значительно больше работы, так как теперь вам нужно написать два драйвера. К счастью, WDF позволяет писать драйверу шины для простых смертных. Вашему VBD необходимо реализовать код для совместного использования ресурсов (прерываний, конфигурационного пространства) среди мини-портов дочерней сети.

Большой имя-производители разделились на выбрали ли они вариант # 1 или вариант # 2, так как могут работы. Из вашего описания это звучит так, будто вам уже дали советы по внедрению VBD.

 Смежные вопросы

  • Нет связанных вопросов^_^