Перейти к содержанию
    

написание PCI драйвера под Win2K/XP/Vista

В ближней перспективе мне, возможно, придется заняться написанием драйвера для 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 не предлагать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С каким из инструментов (Jungo, Numega, чистый DDK) лучше работать (преимущества/недостатки/доступность)?

 

В двух словах.

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

KMDF, насколько мне известно, не поддерживается на W2K.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В свое время я начинал с двух книг. Первая - 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 - совсем ничего не знаю о ней. Мож дойдут руки - посмотрю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

KMDF, насколько мне известно, не поддерживается на W2K.

 

Нет, я ошибся.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IMHO конечно, но чем вам так WDM технология не нравится? Поначалу мне тоже было несколько сложно с ней разбираться, но сейчас драйвера получаются простыми и понятными :)

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А что, пакеты типа Windirver от Jungo, освобождают от необходимости изучать устройство ОС? Если писать серьезный коммерческий драйвер, то в тонкости все равно надо вникать, да и не так их там уж много. ИМХО, "рюшечки" типа WinDiver хороши для стандартных вещей, но если шаг вправо-влево, то разбираться придется по-любому. Так что я бы начал с DDK и упомянутой книжки от Oney. Это немного сложнее (просто больше деталей больше), но оно того стоит.

В свое время bus driver писать для виртуальной шины пришлось (этот тот который PDO рулит и обрабатывает все запросы, которые Ваш FDO драйвер вниз пробрасывает) - получится такой написать с использованием WinDriver? (Хотя, если честно, давно этот пакет не смотрел, может уже и можно)

Насчет уверенности в драйверах - есть пакеты для стресс-тестов, те которые WHQL использует - иногда неплохо помогает. Обработка "ужасно сложных" событий Power/PnP там вполне проверяется на соответствие требованиям системы.

Ну и - Windriver не бесплатный - если драйвер будет продаваться с устройством, то лицензия нужна как ни крути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

к o-henry

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

 

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

 

Хотел бы спросить:

1. Чем закончились Ваши изыскания?

2. С чем из имеющегося софта оказалось лучше работать?

3. Как проще и без больших затрат получить конечный результат?

4. Где бы найти работающие примеры драйверов и программ по обслуживанию PCI?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне хватило Windriver, ибо устройство для внутреннего применения и большой скорости обмена не потребовалось.

Проще некуда. Но если на продажу - цена лицензии от 10К$, если мне не изменяет склероз.

Впрочем, для начальной отладки своего PCI устройства и WinDriver не нужен - в закромах лежит программка PCIscope, через него можно писать/читать регистры отлаживаемого устройства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4. Где бы найти работающие примеры драйверов и программ по обслуживанию PCI?

4 -> 5 Есть работающий драйвер, его вызовы известны и документированы. А вот как им пользоваться...

Я раньше ничего специфического для Win не писал и не использовал. Задача примерно такая: буферизовать

от 1 до N кусков данных и передавать их драйверу. Если все N массивов заполнены и ещё не переданы,

заблокироваться и ждать, пока хотя бы один массив не освободится. Это задача вывода. И наоборот, ввод:

ждать данные из драйвера, заполнить массив и записать его в файл. Повторять, пока из приложения не

придёт комада стоп - вызовом StopInput(). Где бы раздобыть примерчик такого алгоритма? Логика не шибко

сложная, но я очень плохо знаком с системными вызовами Windows, нужно что-нибудь для "быстрого старта"

и в каком месте копать. Очень актуальный вопрос - всем кто поможет советом - спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень актуальный вопрос - всем кто поможет советом - спасибо.

Продолжаю изыскания в этом же направлении. Пока ключевые моменты такие:

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. А далее, удача и терпение, т.к. готовых примеров тоже не нашел и их никто не выдает, так что все самому....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4.Основные книги

Нашёл все, спасибо. Пока искал, натолкнулся ещё на такое: Джонсон Харт, Системное программирование в среде Windows

Ссылка: http://www.mirknig.com/knigi/programming/1...ie-v-srede.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...