Драйвер для PCI Express устройства
От: chaika_sv Россия wmryb.ru
Дата: 06.04.10 13:05
Оценка:
Добрый день.

Есть новое PCI Express устройство. Устройство новое в том смысле, что полностью проектируется и разрабатывается буквально "с нуля" нашей группой.
Моя задача — написать драйвер для этого устройства. Никогда раньше не занимался разработкой драйверов.
Сейчас стоит вопрос об инструменте. Как я понял, есть несколько вариантов:
— WDM
— WDF
— средства типа Jungo WinDriver

Специалисты советовали использовать WDM. WinDriver рекомендовали, как "простое и быстрое" средство.
А WDF, как я понимаю, относительно свежая вещь. О ней мало что узнать удалось.

Кстати, похожий вопрос нашёл здесь
http://rsdn.ru/forum/asm/1391944.aspx
Автор: dorador
Дата: 20.09.05

Но с тех пор, думаю, много что изменилось.

Итак, вопрос. Какой инструмент посоветуйте?

С уваженеим,
Сергей
Re: Драйвер для PCI Express устройства
От: Геннадий Майко США  
Дата: 06.04.10 14:29
Оценка: 2 (1) +1
Здравствуйте, chaika_sv,

_>Есть новое PCI Express устройство. Устройство новое в том смысле, что полностью проектируется и разрабатывается буквально "с нуля" нашей группой.

_>Моя задача — написать драйвер для этого устройства. Никогда раньше не занимался разработкой драйверов.
_>Сейчас стоит вопрос об инструменте. Как я понял, есть несколько вариантов:
_> — WDM
_> — WDF
_> — средства типа Jungo WinDriver

_>Специалисты советовали использовать WDM. WinDriver рекомендовали, как "простое и быстрое" средство.

_>А WDF, как я понимаю, относительно свежая вещь. О ней мало что узнать удалось.

_>Итак, вопрос. Какой инструмент посоветуйте?

--
Я разрабатывал драйвера для PCI Express микросхем и в виде WDM, и в виде WDF/KMDF драйверов. Однозначно разработка такого драйвера с использование WDF для меня была проще (в одном из прошлых проектов у меня были два дрйвера WDM и WDF с идентичной функциональностью). Правда, при этом потребовалось некоторое время, чтобы освоить WDF. Сейчас время освоения WDF можно значительно сократить, ибо есть уже, например, книга "Developing Drivers with Windows Driver Foundation" by Penny Orwick and Guy Smith.

Так что мой совет — только WDF.

C Jungo WinDriver знаком, но для себя решил принципиально его не использовать, чтобы не попадать в зависимость от другой компании.

C уважением,
Геннадий Майко.
Re: Драйвер для PCI Express устройства
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.04.10 16:21
Оценка: 2 (1)
Здравствуйте, chaika_sv, Вы писали:

_>Есть новое PCI Express устройство. Устройство новое в том смысле, что полностью проектируется и разрабатывается буквально "с нуля" нашей группой.

_>Моя задача — написать драйвер для этого устройства. Никогда раньше не занимался разработкой драйверов.
_>Сейчас стоит вопрос об инструменте. Как я понял, есть несколько вариантов:
_> — WDM
_> — WDF
_> — средства типа Jungo WinDriver

Ну для начала надо определиться с тем, что делает данное устройство. Потому что для некоторых классов устройств (например, для сетевых карт) драйвера пишутся совсем по-другому.

WinDriver'ом я бы пользоваться не посоветовал, если устройство будет выпускаться не в единичных экземплярах. Драйвер, написанный на WinDriver'е невозможно сертифицировать по мелкософтовским правилам, а значит, у пользователей будут проблемы с инсталляцией.

_>Специалисты советовали использовать WDM. WinDriver рекомендовали, как "простое и быстрое" средство.

_>А WDF, как я понимаю, относительно свежая вещь. О ней мало что узнать удалось.

WDF — это обертка над WDM, которая должна, по идее, упрощать жизнь. Мелкософт ее сейчас активно продвигает. Я думаю, WDF — это безопасный выбор, но AFAIK не все классы устройств им все еще поддержаны.
Re: Драйвер для PCI Express устройства
От: eagersh  
Дата: 06.04.10 19:59
Оценка: 2 (1)
Здравствуйте, chaika_sv, Вы писали:

_>Добрый день.


_>Есть новое PCI Express устройство. Устройство новое в том смысле, что полностью проектируется и разрабатывается буквально "с нуля" нашей группой.

_>Моя задача — написать драйвер для этого устройства. Никогда раньше не занимался разработкой драйверов.
_>Сейчас стоит вопрос об инструменте. Как я понял, есть несколько вариантов:
_> — WDM
_> — WDF
_> — средства типа Jungo WinDriver

_>Специалисты советовали использовать WDM. WinDriver рекомендовали, как "простое и быстрое" средство.

_>А WDF, как я понимаю, относительно свежая вещь. О ней мало что узнать удалось.

_>Кстати, похожий вопрос нашёл здесь

_>http://rsdn.ru/forum/asm/1391944.aspx
Автор: dorador
Дата: 20.09.05

_>Но с тех пор, думаю, много что изменилось.

_>Итак, вопрос. Какой инструмент посоветуйте?


_>С уваженеим,

_>Сергей

Если ваше устройство не будет принадлежать к какому то определенному классу или другими словами управляться Port драйвером, как например NDIS, то однозначно WDF.Особенно если ты раньше драйвера не писал. WDK содержит хороший пример драйвера для PCI устройства.
\WinDDK\XXXXX\src\general\PLX9x5x
Это драйвер для устройства на базе PLX чипа.Пример также показывает как работать с DMA которые часто имеют PCI устройства.
Так как ты не писал драйвера раньше то рекомендую купить железо для этого драйвера. Будет легче разбираться с примером. OSR писал этот драйвер и на OSR по-моему можно купить железо для драйвера.
Re[2]: Драйвер для PCI Express устройства
От: chaika_sv Россия wmryb.ru
Дата: 07.04.10 06:25
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

Пожалуйста, уважайте коллег и не допускайте излишнего цитирования. Для неуважающих напомню, что есть правила форума и ресурса + санкции за несоблюдение оных. Модератор

ГМ>Так что мой совет — только WDF.

Спасибо. Тоже склоняюсь теперь к WDF.
Благодарю за рекомендацию книги.
Re[2]: Драйвер для PCI Express устройства
От: chaika_sv Россия wmryb.ru
Дата: 07.04.10 07:12
Оценка:
Здравствуйте, Pzz, Вы писали:

Пожалуйста, уважайте коллег и не допускайте излишнего цитирования. Для неуважающих напомню, что есть правила форума и ресурса + санкции за несоблюдение оных. Модератор

Pzz>WDF — это обертка над WDM, которая должна, по идее, упрощать жизнь. Мелкософт ее сейчас активно продвигает. Я думаю, WDF — это безопасный выбор, но AFAIK не все классы устройств им все еще поддержаны.


Спасибо большое за советы. По устройству.
Это устройство для соединения двух компьютеров по схеме "точка-точка". На обоих компьютерах есть микросхемы PCI Express, которые собственно и соединены кабелем.
Не вдаваясь в особенности нашей схемы соедения, скажу, что вся соль именно в кабеле.
Моя же задача (задача драйвера) — работать с буфером микросхемы. Помещать в него данные на микросхеме передатчика и извлекать данные из буфера на микросхеме приёмника.
Re[2]: Драйвер для PCI Express устройства
От: chaika_sv Россия wmryb.ru
Дата: 07.04.10 07:15
Оценка:
Здравствуйте, eagersh, Вы писали:

E>Здравствуйте, chaika_sv, Вы писали:


_>>Добрый день.


_>>Есть новое PCI Express устройство. Устройство новое в том смысле, что полностью проектируется и разрабатывается буквально "с нуля" нашей группой.

_>>Моя задача — написать драйвер для этого устройства. Никогда раньше не занимался разработкой драйверов.
_>>Сейчас стоит вопрос об инструменте. Как я понял, есть несколько вариантов:
_>> — WDM
_>> — WDF
_>> — средства типа Jungo WinDriver

_>>Специалисты советовали использовать WDM. WinDriver рекомендовали, как "простое и быстрое" средство.

_>>А WDF, как я понимаю, относительно свежая вещь. О ней мало что узнать удалось.

_>>Кстати, похожий вопрос нашёл здесь

_>>http://rsdn.ru/forum/asm/1391944.aspx
Автор: dorador
Дата: 20.09.05

_>>Но с тех пор, думаю, много что изменилось.

_>>Итак, вопрос. Какой инструмент посоветуйте?


_>>С уваженеим,

_>>Сергей

E>Если ваше устройство не будет принадлежать к какому то определенному классу или другими словами управляться Port драйвером, как например NDIS, то однозначно WDF.Особенно если ты раньше драйвера не писал. WDK содержит хороший пример драйвера для PCI устройства.

E>\WinDDK\XXXXX\src\general\PLX9x5x
E>Это драйвер для устройства на базе PLX чипа.Пример также показывает как работать с DMA которые часто имеют PCI устройства.
E>Так как ты не писал драйвера раньше то рекомендую купить железо для этого драйвера. Будет легче разбираться с примером. OSR писал этот драйвер и на OSR по-моему можно купить железо для драйвера.


Спасибо за советы.
Особенно за ссылку на пример в WDK.
Re[3]: Драйвер для PCI Express устройства
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.04.10 14:10
Оценка:
Здравствуйте, chaika_sv, Вы писали:

_>Спасибо большое за советы. По устройству.

_>Это устройство для соединения двух компьютеров по схеме "точка-точка". На обоих компьютерах есть микросхемы PCI Express, которые собственно и соединены кабелем.
_>Не вдаваясь в особенности нашей схемы соедения, скажу, что вся соль именно в кабеле.
_>Моя же задача (задача драйвера) — работать с буфером микросхемы. Помещать в него данные на микросхеме передатчика и извлекать данные из буфера на микросхеме приёмника.

Ну так по описанию звучит как WDM (или WDF).

А не хотите из своего устройства сетевой интерфейс сделать, который выглядел бы как Ethernet? Тогда вы сможете использовать сокеты для пересылки собственно данных, вместо того, чтобы изобретать самодельные протоколы.
Re[4]: Драйвер для PCI Express устройства
От: chaika_sv Россия wmryb.ru
Дата: 08.04.10 05:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А не хотите из своего устройства сетевой интерфейс сделать, который выглядел бы как Ethernet? Тогда вы сможете использовать сокеты для пересылки собственно данных, вместо того, чтобы изобретать самодельные протоколы.


Уточните, пожалуйста, что Вы имели ввиду?
Расскажу подробнее о соединении:
Есть плата PCI Express. На ней передатчик — лазеры и приёмник — фотодиоды (соединение оптоволоконное).
Передатчик и приёмник управляются микроконтроллером платы, там свои драйвера.
Моя задача — написать драйвер, который получается реализует протоколы сетевого и транспортного уровней.
Функции этих протоколов в общих чертах — разбивка потока данных на пакеты на стороне передатчика и обратная их сборка на приёмнике.
Пакеты надо по одному передавать в PCI Express (в его буфер).
Re[5]: Драйвер для PCI Express устройства
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.04.10 10:21
Оценка:
Здравствуйте, chaika_sv, Вы писали:

Pzz>>А не хотите из своего устройства сетевой интерфейс сделать, который выглядел бы как Ethernet? Тогда вы сможете использовать сокеты для пересылки собственно данных, вместо того, чтобы изобретать самодельные протоколы.


_>Уточните, пожалуйста, что Вы имели ввиду?


Можно было бы написать к вашей железке драйвер, который с точки зрения операционной системы выглядит, как сетевой. Соответственно, все пакеты, которые система хочет через него отправить, он должен пересылать на другую сторону веревки. Все, что из веревки пришло, он должен отдавать системе как принятый пакет.

Если так сделать, то между компьютерами, соединенными вашей веревкой, можно будет гонять настоящую сеть — все эти TCP, UDP, IP и т.п. Причем реализация их есть в системе уже готовая, и это будет не ваша забота.
Re[6]: Драйвер для PCI Express устройства
От: eagersh  
Дата: 08.04.10 17:11
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, chaika_sv, Вы писали:


Pzz>>>А не хотите из своего устройства сетевой интерфейс сделать, который выглядел бы как Ethernet? Тогда вы сможете использовать сокеты для пересылки собственно данных, вместо того, чтобы изобретать самодельные протоколы.


_>>Уточните, пожалуйста, что Вы имели ввиду?


Pzz>Можно было бы написать к вашей железке драйвер, который с точки зрения операционной системы выглядит, как сетевой. Соответственно, все пакеты, которые система хочет через него отправить, он должен пересылать на другую сторону веревки. Все, что из веревки пришло, он должен отдавать системе как принятый пакет.


Pzz>Если так сделать, то между компьютерами, соединенными вашей веревкой, можно будет гонять настоящую сеть — все эти TCP, UDP, IP и т.п. Причем реализация их есть в системе уже готовая, и это будет не ваша забота.


А зачем ему эмулировать настоящую сеть если у него растояние между компьютерами пару метров и соединение точка-точка? В любом случае ему надо будет писать обмен через PCI и для твоего решения эмулировать Ethernet, разрабатывая что-то типа virtual NDIS miniport driver.Дополнительная работа без явных преимуществ.
Re[7]: Драйвер для PCI Express устройства
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.04.10 21:37
Оценка:
Здравствуйте, eagersh, Вы писали:

E>А зачем ему эмулировать настоящую сеть если у него растояние между компьютерами пару метров и соединение точка-точка? В любом случае ему надо будет писать обмен через PCI и для твоего решения эмулировать Ethernet, разрабатывая что-то типа virtual NDIS miniport driver.Дополнительная работа без явных преимуществ.


Ему все равно какой-то драйвер писать, почему бы не NDIS miniport? Тем более, что их проще писать, чем многие другие. Но зато это избавит его от написания стека протоколов более высокого уровня — а иначе от него не отвертеться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.