spbroma 0 Posted December 25, 2014 · Report post Здравствуйте! У меня появилась задача написать драйвер для устройства, подключаемого к ПК через PCIe. Не имея никаких навыков работы с драйверами, после беглого изучения темы узнал, что мне нужен либо KMDF, либо WDM драйвер. Не смотря на горячие призывы работать на WDM, повелся на продвинутость с "высокоуровневостью" и решил попробовать KMDF. Далее были следующие шаги: 1. Создал новый проект KMDF-драйвера из стандартного шаблона. 2. Указал в inf-файле путь к своему устройству, подключенному к тестовому компьютеру. 3. Сборка и развертывание. Как правило, развертывание заканчивается какой-либо ошибкой и не выполняется один из этапов (или несколько). Причем, в следующий раз может случиться другая ошибка и на другом этапе. При всем при этом в самом проекте между попытками я не меняю ничего и пытаюсь установить один и тот же драйвер, на что получаю разные ошибки. Однако, устройство с установленным драйвером таки появляется в диспетчере устройств, а иногда развертывание драйвера даже заканчивается успешно. Какой-то особой методики и специальных мероприятий для развертывания драйвера на тестовом компьютере я в документации не нашёл, как не смог и найти какую-либо закономерность в том, следствием чего является та или иная ошибка или успешное развертывание. Может быть вы подскажете, что я делаю не так? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SM 0 Posted December 25, 2014 · Report post Не смотря на горячие призывы работать на WDM, повелся на продвинутость с "высокоуровневостью" и решил попробовать KMDF. И теперь придется, скорее всего, быть первопроходцем. Расскажете потом, что это было :) А иначе бы, подсказали бы все до самых подробностей... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
spbroma 0 Posted December 25, 2014 (edited) · Report post И теперь придется, скорее всего, быть первопроходцем. Расскажете потом, что это было :) А иначе бы, подсказали бы все до самых подробностей... Что-то мне подсказывает, что я еще не продвинулся так далеко, где были бы видны различия :) Быть может, вы всё ее можете подсказать? В шаблоне для KMDF драйвера есть заполненный inf-file с указанным ID устройства Root\"DriverName" Когда я поменял его на ID своей платы (PCI\VEN_10EE&DEV_7083) разворачивание намертво повисло на этапе DefaultDriverPackageInstallationTask. Подождав минут 10, прервал отладку, студия вылетела и перезапустилась, тестовый компьютер я ресетнул. После загрузки, я обнаружил, что драйвер встал-таки на моё устройство. Но при повторной попытки развертывания драйвера он проходит все этапы, заканчивая DriverRemoval с ошибкой. А дальше начинается чехарда. Логика подсказывает, что он не может удалить драйвер. Очевидно, потому что он криво встал. Edited December 25, 2014 by spbroma Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SM 0 Posted December 25, 2014 · Report post на этапе DefaultDriverPackageInstallationTask. Я даже не знаю, что это такое... Видимо, некая лишняя сущность, присущая KMDF. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
spbroma 0 Posted December 25, 2014 · Report post Ясно :) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
spbroma 0 Posted December 30, 2014 (edited) · Report post Проблема решена! Перед этим я совершал какие-то хаотичные действия с параметрами inf-файла и установкой/удаления драйвера на тестовом компьютере, в результате чего драйвера вставали черт знает как. Сейчас перепрошил плату другим device id и все починилось. Драйвер встал без проблем, теперь можно со спокойной душой разбираться дальше. PS: Не зря в последний день перед праздниками на работу пришёл :) Edited December 30, 2014 by spbroma Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dvorkin 0 Posted December 30, 2014 · Report post Есть полезная утилита для проверки INF: "C:\Program Files (x86)\Windows Kits\8.1\Tools\x86\ChkInf\chkinf.bat” Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
spbroma 0 Posted December 30, 2014 · Report post Да, ей я проверял. Просто в самом начале, когда я не понимал совсем ничего, я городил в инф-е какие-то чудовищные конструкции (и тогда я его ещё не проверял) и после шаманств и удалением драйвера, перезагрузкой, повторной попыткой установки и прочего безобразия в различных комбинациях, худо-бедно драйвера в системе устанавливались и устройство определялось ими. И, похоже, что-то где-то в реестре, связанное с данным id записалось не так и все стало ставиться криво. Поменял ID, накатил такой же свежий драйвер и вуаля. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...