Как распознавание USB-устройства работает?

Мне любопытно, как распознавание USB-устройства работает в Windows. Я предполагаю, что это - что-то вроде этого:

  • Когда Вы включаете устройство, оно говорит, что Windows "вот является моим идентификатором устройства, чтобы сказать Вам, кто я"
  • Windows надеется видеть, были ли какие-либо драйверы установлены, которые соответствуют тому идентификатору устройства. Драйвер, вероятно, говорит Windows, чем устройство нужно назвать - как "BlackBerry Curve" или "Принтер Canon"
  • Если так, это так или иначе связывает то устройство с тем драйвером
  • Иначе это ищет драйвер соответствия онлайн (при разрешении ему),

Я прав? Если так, это все еще оставляет некоторые вопросы.

  • Когда Вы устанавливаете драйверы, куда они идут? Они - файлы в папке, или они становятся добавленными к реестру?
  • Что делает Windows, когда он сначала распознает устройство, думает и наконец говорит, что "Ваше новое устройство установлено и готово использовать?"
  • Где Windows ищет недостающие драйверы? Это находится в их собственной базе данных? Производители устройств отправляют драйверы Microsoft для включения там?

Кто-либо может объяснить, как этот процесс действительно работает? Кроме того, другие Ose делают это по-другому?

16
задан 10.11.2017, 08:19

3 ответа

Шина USB физически разработана так, чтобы действие вставки (и удаление) разъем могло быть распознано хост-контроллером. Когда этот случай "разъема" происходит, хост-контроллер сообщает своему драйверу устройства, который сканирует шину и просит, чтобы каждое устройство идентифицировало себя.

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

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

Все клавиатуры будут утверждать, что были в HID (Интерфейс пользователя) класс, как будет мыши, планшеты и игровые контроллеры, например. Класс HID имеет несколько подклассов (клавиатуры, мыши, и т.д.), таким образом, каждый обрабатывается ожидаемым способом.

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

В дополнение к классу и подклассу, дескрипторы также включают идентификатор поставщика (VID), идентификатор продукта (PID) и пересмотр. Идентификаторы поставщика присвоены комитетом по стандартам (главным образом в порядке проблемы, но некоторые компании получили специальные запросы: Intel является 0x8086, например). Идентификаторы продукта присвоены каждым поставщиком, и комбинация VID и PID должна быть уникальна для каждого выпущенного продукта.

Когда устройство сначала установлено, VID, PID, пересмотр, класс и подкласс используются предсказуемым способом выбрать драйвер устройства, который загружается. Наличие поставщика и собственных имен продукта позволяет поставщику настроить устройство, которое могло бы иначе быть обработано (почти) правильно системным драйвером запаса.

Другой важный дескриптор является порядковым номером устройства. Если устройство имеет порядковый номер, то оно может быть распознано и рассматривало то же при включении снова, даже если используется другой физический USB-порт. Это важно для устройств хранения так, чтобы они присвоили ту же букву диска, и для устройств как адаптеры последовательного порта и модемы так, чтобы им дали то же обозначение COM-порта.

Этот целый процесс документируется в MSDN, но детали распространены среди множества мест.

24
ответ дан 07.12.2019, 10:47

Вопросы:

  • Каталоги: Драйверы установлены в 2 каталога. Рабочая часть (в большинстве случаев) установлена в %RootDir %\system32, часть информации об устройстве установлена в %RootDir %\inf. Под inf dir, для устанавливал/регистрировал драйвер, файл oem*.inf создается. (* число). В соответствии с Vista драйвер копируется в каталог %RootDir %\system32\driverstore как ссылка, еще не устанавливая устройства, с которыми встречаются.
  • Реестр: драйвер установлен как сервис привилегированного режима. Для этого определенные ключи реестра создаются для сервиса драйвера. Существует другое место в соответствии с драйвером шины, где соответствующие устройства получают ключ экземпляра отдельного устройства. В этом ключе устройство имеет ссылку на в настоящее время используемый драйвер для этого устройства.
  • Устройство 'прибытие': Когда драйвер шины находит новое устройство на своей шине, он создает ключевой реестр под своим собственным ключом, какие корреспонденты к уникальному идентификатору экземпляра устройства, который может использоваться для однозначного определения устройства в системе. Если этот ключ уже существует, драйвер шины пытается загрузить устройство, на которое ссылается этот узел. Когда этот узел не существует, или драйвер не загружается, система пытается найти совместимый драйвер для устройства путем сканирования драйверов зарегистрированного устройства под %RootDir %\inf. Драйверы, которые имеют право на это устройство, перечисляются и отсортировали. Лучший драйвер затем выбран и загружен для устройства.
  • Поиск драйвера: Драйверы ищутся сначала в inf каталоге. Когда никакой драйвер не найден, окна спрашивают пользователя, если он может обеспечить драйверы или если это должно считать сервер Microsoft. Производители драйверов могут отправить свои драйверы для включения в сервер драйвера устройства Microsoft.

Lunatik имеет первую часть ответа, как так называемый драйвер шины находит устройство.

7
ответ дан 07.12.2019, 10:47

Я хотел бы рекомендовать хорошую книгу о usb:

  • USB, завершенный Jan Axelson

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

3
ответ дан 07.12.2019, 10:47

Теги

Похожие вопросы