реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> написание PCI драйвера под Win2K/XP/Vista
o-henry
сообщение Jul 10 2007, 08:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069



В ближней перспективе мне, возможно, придется заняться написанием драйвера для PCI-ной платы под Windows. Интересует WinXP и Win2K с перспективой переноса на Vista. Для начала на уровне чтения/записи в I/O и обработки прерываний от платы, далее-работа с памятью через DMA . Практического опыта в разработке драйверов нет. Нужна информация по состоянию дел в этой области на сегодняшний день и доступным инструментам.

Как я понимаю, раньше была одна модель драйверов – WDM (VxD не рассматриваем как древность) и 3 варианта разработки дров под нее:
1) С помощью Jungo Windriver
2) С помощью Numega Driver Studio
3) С помощью только DDK.

На сегодня, кроме WDM, у майкрософт появилась новая модель драйверов - Kernel-Mode Driver Framework (KMDF) and User-Mode Driver Framework (UMDF).
Насколько я понял, с моделью KMDF можно работать в WinXP и Vista.
А для Win2K она поддерживается?
На какую модель WDM или KMDF лучше ориентироваться в новых разработках?
С каким из инструментов (Jungo, Numega, чистый DDK) лучше работать (преимущества/недостатки/доступность)?

P.S.
Ссылки на литературу и тематические форумы приветствуются.
Google не предлагать.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 10 2007, 10:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(o-henry @ Jul 10 2007, 12:56) *
С каким из инструментов (Jungo, Numega, чистый DDK) лучше работать (преимущества/недостатки/доступность)?


В двух словах.
Написать качественный драйвер под WDM при помощи чистого DDK крайне сложно даже опытному программисту. Система состояний WDM драйвера крайне запутанна и местами противоречива. Даже примеры от MS грешат многочисленными ошибками. На этом и живут все остальные инструменты, вроде Jungo и NuMega.
KMDF, насколько мне известно, не поддерживается на W2K.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 10 2007, 10:11
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



В свое время я начинал с двух книг. Первая - Edvard N. Dekker, Joseph M. Newcomer - Developing Windows NT Device Drivers - A Programmer's Handbook. Вторая - Walter Oney - Windows Driver Model - или нечто подобное по названию. Первой книги в электронном виде я не встречал, вторая есть в местных закромах.

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

Есть еще не самая плохая русская книга Солдатова - однако она содержит больше набор готовых рецептов и, IMHO, менее способствует пониманию тонкостей драйверописания.

С этого можно начать. Дальше есть конференции на Google, посвященные именно вопросу разработки драйверов под различные версии NT систем.

С точки зрения фреймворка - здесь руководствуйтесь собственным вкусом и наличным временем. С Jungo вы сможете написать нечто работоспособное уже через пару недель разборок. Numega, возможно, даст еще более быстрый старт, но она, судя по всему, уже не поддерживается. Чистый DDK имеет смысл учить только в том случае, если вы собираетесь и дальше заниматься написанием драйверов, поскольку нечто вменяемое на чистом DDK получится не ранее, чем месяца через три. KMDF - это дальнейшее расширение технологии WDM, а в своей базе просто еще один фрамеворк от производителя ОС. С ним я еще не работал, но судя по отзывам - очень неплохая штука. Возможно вам можно начать с нее, если найдете достаточно информации по ней. UMDF - совсем ничего не знаю о ней. Мож дойдут руки - посмотрю.


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 10 2007, 19:31
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Oldring @ Jul 10 2007, 14:09) *
KMDF, насколько мне известно, не поддерживается на W2K.


Нет, я ошибся.
Заглянул в документацию на последние версии KMDF. Наисано, что можно разрабатывать драйвера под W2K и более поздние версии. Тогда однозначно больше не следует связываться с чистой WDM.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 11 2007, 07:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Цитата
Заглянул в документацию на последние версии KMDF. Наисано, что можно разрабатывать драйвера под W2K и более поздние версии. Тогда однозначно больше не следует связываться с чистой WDM.
Угу, только под Win2k возможно придется дополнительно устанавливать некий пакет расширений и ядерных библиотек, поскольку в чистом виде KMDF под Win2k может не запуститься. Такое у меня сложилось впечатление после прочтения обзорной статьи Walter Oney о технологии KMDF. Не знаю, может быть впечатление и ошибочное.


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 11 2007, 09:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(v_mirgorodsky @ Jul 11 2007, 11:11) *
Угу, только под Win2k возможно придется дополнительно устанавливать некий пакет расширений и ядерных библиотек, поскольку в чистом виде KMDF под Win2k может не запуститься. Такое у меня сложилось впечатление после прочтения обзорной статьи Walter Oney о технологии KMDF. Не знаю, может быть впечатление и ошибочное.


Конечно, придется. Но IMHO это меньшее зло, чем WDM. Написанный драйвер ведь все равно нужно устанавливать тем или иным образом.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 11 2007, 09:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Цитата
Конечно, придется. Но IMHO это меньшее зло, чем WDM.
IMHO конечно, но чем вам так WDM технология не нравится? Поначалу мне тоже было несколько сложно с ней разбираться, но сейчас драйвера получаются простыми и понятными smile.gif


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 11 2007, 11:28
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(v_mirgorodsky @ Jul 11 2007, 13:37) *
IMHO конечно, но чем вам так WDM технология не нравится? Поначалу мне тоже было несколько сложно с ней разбираться, но сейчас драйвера получаются простыми и понятными smile.gif


Вы при этом уверены, что Ваши драйвера правильно обрабатывают все требуемые события? PnP? Power? А остановку драйвера для переконфигурирования ресурсов? И делаете это незаметно для клиентов? Ваши драйвера при этом, конечно используют прерывания и DMA?

Я, например, про свои все еще не уверен. Хоть немало сил потратил на изучение тонкостей обработки этих событий, описанных, зачастую, не в хелпе DDK, а в дополнительных статьях, разъясняющих тонкости ядра виндов. В общем, WDM драйвера оставили у меня ощущение кошмара.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jul 11 2007, 15:14
Сообщение #9


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Oldring @ Jul 11 2007, 14:28) *
Я, например, про свои все еще не уверен. Хоть немало сил потратил на изучение тонкостей обработки этих событий, описанных, зачастую, не в хелпе DDK, а в дополнительных статьях, разъясняющих тонкости ядра виндов. В общем, WDM драйвера оставили у меня ощущение кошмара.

А что, пакеты типа Windirver от Jungo, освобождают от необходимости изучать устройство ОС? Если писать серьезный коммерческий драйвер, то в тонкости все равно надо вникать, да и не так их там уж много. ИМХО, "рюшечки" типа WinDiver хороши для стандартных вещей, но если шаг вправо-влево, то разбираться придется по-любому. Так что я бы начал с DDK и упомянутой книжки от Oney. Это немного сложнее (просто больше деталей больше), но оно того стоит.
В свое время bus driver писать для виртуальной шины пришлось (этот тот который PDO рулит и обрабатывает все запросы, которые Ваш FDO драйвер вниз пробрасывает) - получится такой написать с использованием WinDriver? (Хотя, если честно, давно этот пакет не смотрел, может уже и можно)
Насчет уверенности в драйверах - есть пакеты для стресс-тестов, те которые WHQL использует - иногда неплохо помогает. Обработка "ужасно сложных" событий Power/PnP там вполне проверяется на соответствие требованиям системы.
Ну и - Windriver не бесплатный - если драйвер будет продаваться с устройством, то лицензия нужна как ни крути.
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 12 2007, 17:59
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Цитата
Вы при этом уверены, что Ваши драйвера правильно обрабатывают все требуемые события? PnP? Power? А остановку драйвера для переконфигурирования ресурсов? И делаете это незаметно для клиентов? Ваши драйвера при этом, конечно используют прерывания и DMA?
В сове время я потратил почти месяц на аккуратные разборки и переписывание под мои нужды фрамеворка, предложенного Walter Oney. Многие вещи показались мне у него нерациональными, но основная идея была достаточно простой. С того времени проблем с написанием WDM драйверов у меня особых не возникает.


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 26 2010, 09:55
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



к o-henry
Для меня эта тема актуальна. Начал заниматься ею пару недель назад и уже ощущаю в голове перегрев.

На форуме как-то ходило китайское выражение: "Спроси, что тебя ждет на этой дороге у тех, кто по ней уже возвращается".

Хотел бы спросить:
1. Чем закончились Ваши изыскания?
2. С чем из имеющегося софта оказалось лучше работать?
3. Как проще и без больших затрат получить конечный результат?
4. Где бы найти работающие примеры драйверов и программ по обслуживанию PCI?
Go to the top of the page
 
+Quote Post
o-henry
сообщение Jan 26 2010, 10:08
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069



Мне хватило Windriver, ибо устройство для внутреннего применения и большой скорости обмена не потребовалось.
Проще некуда. Но если на продажу - цена лицензии от 10К$, если мне не изменяет склероз.
Впрочем, для начальной отладки своего PCI устройства и WinDriver не нужен - в закромах лежит программка PCIscope, через него можно писать/читать регистры отлаживаемого устройства.
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Feb 2 2010, 21:23
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



Цитата(Serhiy_UA @ Jan 26 2010, 13:55) *
4. Где бы найти работающие примеры драйверов и программ по обслуживанию PCI?

4 -> 5 Есть работающий драйвер, его вызовы известны и документированы. А вот как им пользоваться...
Я раньше ничего специфического для Win не писал и не использовал. Задача примерно такая: буферизовать
от 1 до N кусков данных и передавать их драйверу. Если все N массивов заполнены и ещё не переданы,
заблокироваться и ждать, пока хотя бы один массив не освободится. Это задача вывода. И наоборот, ввод:
ждать данные из драйвера, заполнить массив и записать его в файл. Повторять, пока из приложения не
придёт комада стоп - вызовом StopInput(). Где бы раздобыть примерчик такого алгоритма? Логика не шибко
сложная, но я очень плохо знаком с системными вызовами Windows, нужно что-нибудь для "быстрого старта"
и в каком месте копать. Очень актуальный вопрос - всем кто поможет советом - спасибо.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Feb 3 2010, 06:36
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(AndrewN @ Feb 3 2010, 01:23) *
Очень актуальный вопрос - всем кто поможет советом - спасибо.

Продолжаю изыскания в этом же направлении. Пока ключевые моменты такие:
1.DriverStudio 3.2 (фирма NuMega) скачать можно здесь: http://www.cracklab.ru/download.php?action=list&n=MTA=
2.Затем Visual C++ 6, найти просто, а в него DriverStudio 3.2 включается автоматически.
3.Далее в VC++6, через меню DriverStudio -> DriverWizard создать драйвер и приложение для тестирования PCI-платы и драйверов.
4.Основные книги есть и в продаже и в электронном виде:
- Уолтер Они «Использование microsoft windows driver model»
- М. Руссинович, Д. Соломон «Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000.»
- В. П. Солдатов «Программирование драйверов Windows» 3-е изд.
5. Еще примеры процесса, с пояснениями:
- «Программирование драйверов» в DDK для LPT на http://www.pcports.ru/Articles.php
- «Использование NuMega DriverStudio для написания WDM-драйверов» http://www.codenet.ru/progr/visualc/wdmnumega/
6. А далее, удача и терпение, т.к. готовых примеров тоже не нашел и их никто не выдает, так что все самому....
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Feb 3 2010, 11:03
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



Цитата(Serhiy_UA @ Feb 3 2010, 09:36) *
4.Основные книги

Нашёл все, спасибо. Пока искал, натолкнулся ещё на такое: Джонсон Харт, Системное программирование в среде Windows
Ссылка: http://www.mirknig.com/knigi/programming/1...ie-v-srede.html
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th July 2025 - 19:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016