Пользовательский USB VID/PID - заставить Windows 7 и 8 автоматически выбирать драйвер usbser.sys
Я разрабатываю прошивку для USB-устройства с микроконтроллером STM32F070. Я сгенерировал базовую кодовую базу (без ОС) с помощью STM32CubeMX, настроив устройство как USB CDC (класс коммуникационного устройства), чтобы оно автоматически определялось как VCP (виртуальный COM-порт) в Windows 7, 8, и 10. Сведения о драйвере показывают, что он использует Windows usbser.sys
Водитель.
Когда я изменяю идентификатор поставщика USB (VID) или идентификатор продукта (PID) или строку производителя, он все еще быстро определяется как последовательное устройство USB с помощью диспетчера устройств Windows 10, но не Windows 7 или 8. Windows 7 и 8 тратят долгое время искал в Центре обновления Windows драйвер, а потом не смог его найти.
Как изменить прошивку / дескрипторы устройства, чтобы хосты Windows 7 и 8 автоматически устанавливали usbser.sys
драйвер для устройства, если оно имеет специфические для поставщика значения для USB VID, PID и строки производителя?
2 ответа
В состав Windows 10 входит новый драйвер с именем usbser.inf, который будет соответствовать устройствам, соответствующим спецификации ACM USB CDC, и будет загружать для них драйвер usbser.sys.
Чтобы ваше устройство USB CDC ACM работало на более старых версиях Windows, вам нужно будет самостоятельно предоставить INF-файл, который сообщит Windows о необходимости загрузки usbser.sys при обнаружении устройства USB с идентификатором вашего поставщика и идентификатором продукта. Для Windows 7, Vista и XP это всего лишь вопрос написания INF-файла и его распространения среди ваших клиентов. В Windows 8 и более поздних версиях вам необходимо приобрести сертификат для подписи кода, а затем подписать INF-файл (или заглянуть в такие программные утилиты, как zadig и libwdi, которые позволяют обходить проверки подписи).
Обратите внимание, что подпись отличается от WHQL. Получив сертификат подписи, вы можете подписать драйвер самостоятельно, без ожидания или одобрения Microsoft.
Вот пример файла INF, который использует usbser.sys:
https://github.com/pololu/a-star/blob/master/drivers/a-star.inf
Я много писал о том, как подписывать пакеты драйверов в этой статье:
Проблема заключается в .inf
файл. в win 10 есть новый (usbser.inf
) который загружает драйвер usbser.sys
автоматически в win 7 и 8 вы должны написать свой собственный .inf
файл, который связывает ваш PID и VID с usbser.sys
драйвер см. https://msdn.microsoft.com/de-de/library/windows/hardware/ff538820%28v=vs.85%29.aspx и https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx
В Windows 8.1 и более ранних версиях операционной системы Usbser.sys не загружается автоматически при подключении устройства USB-to-serial к компьютеру. Чтобы загрузить драйвер, вам нужно написать INF, который ссылается на модемную INF (mdmcpq.inf) и содержит разделы [Install] и [Needs]. Эти разделы необходимы для создания экземпляра службы, копирования двоичных файлов входящих сообщений и регистрации GUID интерфейса устройства, который требуется приложениям для поиска устройства и общения с ним. Этот INF указывает "Usbser" в качестве нижнего драйвера фильтра в стеке устройств.
источник: https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx
В https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx, мне нужно написать свой собственный USB-драйвер на стороне хоста для устройства CDC и https://community.nxp.com/thread/301439 являются примерами файлов.inf для win 7 и 8.