Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема при развертывании KMDF драйвера  (Прочитано 32649 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spbroma
Новенький

ru
Offline Offline

« : 29-12-2014 10:21 » 

Здравствуйте!

У меня появилась задача написать драйвер для устройства, подключаемого к ПК через PCIe. Не имея никаких навыков работы с драйверами, после беглого изучения темы узнал, что мне нужен либо KMDF, либо WDM драйвер. Не смотря на горячие призывы работать на WDM, повелся на продвинутость с "высокоуровневостью" и решил попробовать KMDF.

Далее были следующие шаги:

1. Создал новый проект KMDF-драйвера из стандартного шаблона в Visual Studio 2013.
2. Указал в inf-файле id своего устройства, подключенному к тестовому компьютеру (PCI\VEN_10EE&DEV_7083&SUBSYS_000710EE&REV_00).
3. Сборка и развертывание.

Как я понимаю, готовый шаблон вполне работоспособен, во всяком случае, когда там был указан id типа Root\DriverName, он устанавливался без проблем.
При попытке же установки драйвера с изменённым под мою плату inf-файлом разворачивание либо намертво повисает на этапе DefaultDriverPackageInstallationTask, либо завершает его с ошибкой.

Может быть вы подскажете, что я делаю не так? Или под конкретного железо недостаточно просто прописать id, для того, чтобы драйвер с нулевым функционалом просто встал, а необходимо прописать какие-то функции?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 29-12-2014 11:28 » 

ну не совсем понятно что за "шаблон"... вообще то это должны быть несколько разные шаблоны. для драйвера-просто-так и для драйвера-под-PCIe)
PS это мне - кажется что разные. KMDF не изучал, но с позиций WDM там немного по другому драйвер стартует.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
spbroma
Новенький

ru
Offline Offline

« Ответ #2 : 29-12-2014 11:57 » 

Шаблон обыкновенный.


Внутри заглуши с минимальным кодом для функций DriverEntry, EvtDeviceAdd, EvtDriverContextCleanup, CreateDevice, QueueInitialize, EvtIoStop.

Как я понимаю, для того, чтобы драйвер стартовал, он должен хотя бы установиться. А даже этого не может. Иногда пишет, мол, устройство такое-то не найдено. Хотя тут же захожу в диспетчер задач и оно там прекрасно определяется.

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

1. Зависание на каком-то этапе.
2. "Attempting to connect..." тоже на разных этапах.
3. Все этапы завершились, часть из них Failed.

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

Еще немного и окончательно сдамся с WDF и буду рыть WDM. Но скорее всего я просто чего-то не знаю, какой-то важной мелочи. Типа, где-нибудь поставить галочку или выбрать режим или дописать строчку в inf-файл.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 29-12-2014 16:28 » 

не, установка - это не то. там только реестр формируется и файл копируется. сам код не запускается насколько я понимаю (в вашем случае).
В DriverEntry вы должны заполнить обработчики для EvtDeviceAdd. возможно в KMDF что то по умолчанию уже стоит. EvtDeviceAdd  - исполняется для каждого экземпляра устройства. там аппаратные ресурсы захватываются-выделяются. остальные процедуры из вами перечисленных скорее всего пока не должны вызываться. это уже когда приложение к драйверу будет обращатся.

это сделали?
http://msdn.microsoft.com/en-us/library/windows/hardware/ff541693(v=vs.85).aspx
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
spbroma
Новенький

ru
Offline Offline

« Ответ #4 : 29-12-2014 19:41 » 

Ну так да, я это и имел в виду. А почему он не устанавливается?
Записан
spbroma
Новенький

ru
Offline Offline

« Ответ #5 : 30-12-2014 08:50 » 

Проблема решена.

Перед этим я совершал какие-то хаотичные действия с настройками и прошивкой, в результате чего драйвера вставали черт знает как. Сейчас перепрошил плату (там ПЛИС стоит) другим device id и все починилось. Драйвер встал без проблем, теперь можно со спокойной душой разбираться дальше.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 30-12-2014 09:42 » new

поздравляю с первым шагом)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines