Разработка pci драйвера для windows

Разработка PCI драйвера и функции, хелп!

Здравствуйте уважаемые форумчане.

У меня задача написать драйвер для PCI-E платы и измерить скорость передачи данных.

Если кто знает, подскажите пожалуйста, как правильно измерять скорость передачи данных из компьютера в память платы и наоборот? Каковы основные принципы, шаги решения этой проблемы?

Re: Разработка PCI драйвера и функции, хелп!

1. Начинаешь измерять 2. Измеряешь 3. Заканчиваешь имзерять 4. Profit

Если на каком-то из этапов вылезут ошибки, то исправляешь их.

Re: Разработка PCI драйвера и функции, хелп!

Безтолковых людей прошу воздержаться от постов, интересуют ответы разбирающихся в этом вопросе людей.

Re: Разработка PCI драйвера и функции, хелп!

jiffies не поможет?

Re: Разработка PCI драйвера и функции, хелп!

Re: Разработка PCI драйвера и функции, хелп!

> использовать tsc
а у разных ядер/процессоров tsc не может быть не синхронным?

Re: Разработка PCI драйвера и функции, хелп!

> Безтолковых людей прошу воздержаться от постов, интересуют ответы разбирающихся в этом вопросе людей.

Основные шаги? Основные шаги это чтение документации на твой PCI-контроллёр. Потом изучение PCI-подсистемы в ядре. Или ты думаешь, что здесь тебе дадут пример кода?

Ты вообще задал черезчур абстрактный вопрос, и получил на него соответсвтующий ответ. Если хочешь, чтоб такого не было — задавай более конктрентые вопросы. Например: у меня есть PCI железка с поддержкой bus-master, работает она на ультра-спарке, с таким-то вот контроллёром. Как померять среднюю скорость передачи данных за такой-то промежуток с такой-то погрешностью?

А всё, что ты здесь развёл — это бестолковый бред.

Re: Разработка PCI драйвера и функции, хелп!

> У меня задача написать драйвер для PCI-E платы и измерить скорость передачи данных.

> как правильно измерять скорость передачи данных из компьютера в память платы и наоборот? Каковы основные принципы, шаги решения этой проблемы?

Тебе нужно написать полноценный драйвер или только стабы для посылания мусора в плату? Да и вообще, напиши сначала драйвер. Думаю, пока будешь писать — глупые вопросы сами отпадут

Re: Разработка PCI драйвера и функции, хелп!

Вообще написали что-то типа драйвера — программа работающая в юзерспейсе. Записывает в память платы и считывает от туда данные.

Опишу ситуацию подробнее. Купили плату разработки от Altera. Но для нее нет драйверов под Linux. Нужно обеспечить запись данных в память платы и считывание данных а так же измерить скорость чтения и записи.

Суешь плату в PCI-E слот и тк дров нету под нее, lspci показывает Unknown Device. Но пишет что busmaster есть. В папке /dev/ появился файл «mem» — это и есть память платы. Каким раком если дров нету Linux всеже находит эту память?

А программа типа драйвера получает доступ к данной памяти посредством функции mmap.

Рассказываю как я НЕПРАВИЛЬНО измерял скорость чтения и записи:

Измерял текущее время с точностью до микросекунд перед циклом записи или чтения, потом сразу после этого измерял время второй раз, находил время а за которое производилась запись или чтение и переводил в скорость.

Я понимаю что это не правильно. Всеже скорость получилась чтото около 10-20 мегабайт в секунду. Просто точно нельзя таким методом узнать в какой момент закончилась запись. Линукс может долго тупить перед тем как выполнить следущую строчку и выполнить еще кучу других операций. Почитав литературу стал понимать что такую задачу можно выполнить обратчиком прерываний. Тоесть процессор получает сигнал о том что, например, запись в память платы закончена.

Читайте также:  Windows службы зарегистрировано пользователей

Нужно получить максимальную скорость а это теоретически должно быть чтото около 2 гигов в секунду. Для этого как я понял нужно работать в режиме DMA.

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

Хоть схему или просто сказать что по шагам нужно делать.

Типа чтобы осужествить запись в DMA режиме нужно DMA контроллеру прописать в регистры адрес откуда и адрес куда. И подать команду на запись или чтение.

Где этот DMA контроллер находится?? Какой адрес ему прописывать виртуальный или физический (адрес памяти) ? Как записывать в его регистры?

Вот как мой лаймерский мозг представляет как это должно работать:

WinDriver создает драйвер и кернел плагин для платы.

Нужно модифицировать этот кернел плагин, который загружается при старте системы, определить функции записи и чтения в память устройства. Добавить функцию измерения скорости (написать самому)

Далее эту функцию можно вызывать из драйвера?

Разработка pci драйвера для windows

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

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

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

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

С уваженеим,
Сергей

От: Геннадий Майко
Дата: 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 уважением,
Геннадий Майко.

От: Pzz https://github.com/alexpevzner
Дата: 06.04.10 16:21
Оценка: 2 (1)

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

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

Читайте также:  Windows sql server linux

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

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

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

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

От: eagersh
Дата: 06.04.10 19:59
Оценка: 2 (1)

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

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

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

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

От: chaika_sv wmryb.ru
Дата: 07.04.10 06:25
Оценка:

Здравствуйте, Геннадий Майко, Вы писали:

От: chaika_sv wmryb.ru
Дата: 07.04.10 07:12
Оценка:

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

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

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

От: chaika_sv wmryb.ru
Дата: 07.04.10 07:15
Оценка:

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

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

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

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

Спасибо за советы.
Особенно за ссылку на пример в WDK.

От: Pzz https://github.com/alexpevzner
Дата: 07.04.10 14:10
Оценка:

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

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

Читайте также:  Автоматическое удаление временных файлов windows

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

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

От: chaika_sv wmryb.ru
Дата: 08.04.10 05:40
Оценка:

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

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

Уточните, пожалуйста, что Вы имели ввиду?
Расскажу подробнее о соединении:
Есть плата PCI Express. На ней передатчик — лазеры и приёмник — фотодиоды (соединение оптоволоконное).
Передатчик и приёмник управляются микроконтроллером платы, там свои драйвера.
Моя задача — написать драйвер, который получается реализует протоколы сетевого и транспортного уровней.
Функции этих протоколов в общих чертах — разбивка потока данных на пакеты на стороне передатчика и обратная их сборка на приёмнике.
Пакеты надо по одному передавать в PCI Express (в его буфер).

От: Pzz https://github.com/alexpevzner
Дата: 08.04.10 10:21
Оценка:

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

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

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

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

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

От: eagersh
Дата: 08.04.10 17:11
Оценка:

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

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

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

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

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

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

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

От: Pzz https://github.com/alexpevzner
Дата: 08.04.10 21:37
Оценка:

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

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

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

Оцените статью