Як працює розпізнавання USB-пристроїв?


16

Мені цікаво, як працює розпізнавання USB-пристроїв у Windows. Я думаю, це щось подібне:

  • Коли ви підключаєте пристрій, він повідомляє Windows "ось ідентифікатор мого пристрою, щоб розповісти, що я"
  • Windows виглядає, чи встановлені будь-які драйвери, які відповідають цьому ідентифікатору пристрою. Драйвер, ймовірно, повідомляє Windows про те, як слід називати пристрій - наприклад, "BlackBerry Curve" або "Canon Printer"
  • Якщо так, то він якось асоціює цей пристрій із цим драйвером
  • В іншому випадку він шукає відповідного драйвера в Інтернеті (якщо ви дозволите)

Я правий? Якщо так, це все ще залишає деякі питання.

  • Коли ви встановлюєте драйвери, куди вони йдуть? Чи вони містять файли в папці, або їх додають до реєстру?
  • Що робить Windows, коли вперше розпізнає пристрій, думає і, нарешті, каже "ваш новий пристрій встановлений і готовий до використання?"
  • Де Windows шукає відсутніх драйверів? Чи є у власній базі даних? Чи виробники пристроїв подають драйвери Microsoft для включення туди?

Чи може хтось пояснити, як насправді працює цей процес? Також чи роблять це інші операційні системи по-різному?

Відповіді:


24

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

Усі USB-пристрої містять сукупність інформації про пристрій, що називається дескрипторами. Дескриптори пристроїв витягуються з усіх пристроїв однією командою. Це дозволяє драйверу пристрою для самої шини USB ефективно запитувати щойно підключений пристрій, що це таке, і очікувати отримання розумної відповіді.

З усіх дескрипторів лише деякі використовуються безпосередньо для відповідності драйверів більшості пристроїв. Це пояснюється тим, що USB визначає класи пристроїв, і зазвичай системного драйвера для кожного класу пристроїв достатньо для обробки будь-яких пристроїв, які заявляють, що вони належать до цього класу.

Усі клавіатури претендують на клас HID (Human Interface), як і миші, планшети та ігрові контролери, наприклад. Клас HID має кілька підкласів (клавіатури, миші тощо), тому кожен з них обробляється очікуваним способом.

Більшість дискових пристроїв претендують на клас масового зберігання, а системний драйвер також працює і для них.

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

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

Ще один важливий дескриптор - серійний номер пристрою. Якщо пристрій має серійний номер, то його можна розпізнати та обробити тим самим при повторному підключенні, навіть якщо використовується інший фізичний порт USB. Це важливо для пристроїв зберігання даних, щоб вони отримували однакову літеру диска, а також для пристроїв, таких як адаптери послідовного порту та модеми, щоб їм було призначено однакове позначення порту COM.

Весь цей процес задокументований в MSDN , але деталі розкинуті серед різних місць.


Дякую за методичне пояснення. Дуже цікаво!
Натан Лонг

3
Години, які я витрачав на отримання деталей з документації та зразків, було несподіваним завданням, коли я написав свій перший драйвер пристрою для Windows. Я радий поділитися результатами цього ...
RBerteig,

7

Запитання:

  • Довідники: драйвери встановлені у 2 каталоги. Запущена частина встановлюється (у більшості випадків), встановлена ​​у% RootDir% \ system32, частина інформації про пристрій встановлюється у% RootDir% \ inf. Під infir, для встановленого / зареєстрованого драйвера створюється файл oem * .inf. (* - число). Під Vista з'являється копія драйвера в каталог% RootDir% \ system32 \ driverstore як інсталяція ще не зустрічаються пристроїв.
  • Реєстр: драйвер встановлюється як сервіс у режимі ядра. Для цього створюються певні ключі реєстру для служби драйверів. Під драйвером шини є ще одне місце, де відповідні пристрої отримують індивідуальний ключ примірника пристрою. У цьому ключі пристрій має посилання на поточно використовуваний драйвер цього пристрою.
  • "Прихід" пристрою: Коли драйвер шини знаходить новий пристрій на своїй шині, він створює реєстр ключів під власним ключем, який відповідає унікальному ідентифікатору примірника пристрою, який може бути використаний для унікальної ідентифікації пристрою в системі. Якщо цей ключ вже існує, драйвер шини намагається завантажити пристрій, на який посилається цей вузол. Коли цього вузла не існує або драйвер не завантажується, система намагається знайти сумісний драйвер для пристрою, скануючи зареєстровані драйвери пристрою під% RootDir% \ inf. Драйвери, які відповідають цим пристроям, перераховуються та сортуються. Потім вибирається найкращий драйвер та завантажується для пристрою.
  • Пошук драйверів: спочатку шукаються драйвери в каталозі inf. Коли драйвера не знайдено, Windows запитує користувача, чи може він надавати драйвери чи він повинен шукати на сервері Microsoft. Виробники драйверів можуть подати свої драйвери для включення на сервер драйверів пристроїв Microsoft.

Lunatik має першу частину відповіді, як так званий водій автобуса знаходить пристрій.


3

Я хотів би порекомендувати гарну книгу про usb:

  • USB Комплект від Яна Аксельсона

Я знаю, що ви цього не просили, але добре знати трохи про USB-пристрої, які повинні підключитися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.