Jak działa rozpoznawanie urządzeń USB?

16

Jestem ciekawy, jak działa rozpoznawanie urządzeń USB w systemie Windows. I wyobraź sobie, że to coś takiego:

  • Gdy podłączysz urządzenie, system Windows mówi „tutaj jest mój identyfikator urządzenia, który mówi ci, kim jestem”
  • System Windows sprawdza, czy zostały zainstalowane sterowniki pasujące do tego identyfikatora urządzenia. Sterownik prawdopodobnie mówi systemowi Windows, jak powinno się nazywać urządzenie - na przykład „BlackBerry Curve” lub „Canon Printer”
  • Jeśli tak, w jakiś sposób wiąże to urządzenie z tym sterownikiem
  • W przeciwnym razie szuka pasującego sterownika online (jeśli na to pozwalasz)

Czy mam rację? Jeśli tak, to pozostawia kilka pytań.

  • Gdzie są instalowane sterowniki? Czy są to pliki w folderze, czy też zostają dodane do rejestru?
  • Co robi system Windows, gdy po raz pierwszy rozpoznaje urządzenie, myśli i wreszcie mówi „Twoje nowe urządzenie jest zainstalowane i gotowe do użycia?”
  • Gdzie system Windows szuka brakujących sterowników? Czy to we własnej bazie danych? Czy producenci urządzeń przesyłają sterowniki do firmy Microsoft w celu włączenia ich?

Czy ktoś może wyjaśnić, jak ten proces naprawdę działa? Czy inne systemy operacyjne robią to inaczej?

Nathan Long
źródło

Odpowiedzi:

24

Magistrala USB jest fizycznie zaprojektowana tak, że kontroler hosta może rozpoznać czynność włożenia (i usunięcia) wtyczki. Kiedy wydarzy się to zdarzenie „podłącz”, kontroler hosta informuje sterownik urządzenia, który skanuje magistralę i prosi każde urządzenie o identyfikację.

Wszystkie urządzenia USB zawierają zbiór informacji o urządzeniu, zwanych deskryptorami. Deskryptory urządzeń są pobierane ze wszystkich urządzeń za pomocą tego samego polecenia. Dzięki temu sterownik urządzenia dla samej magistrali USB może skutecznie zapytać nowo podłączone urządzenie, co to jest, i oczekiwać rozsądnej odpowiedzi.

Ze wszystkich deskryptorów tylko kilka jest używanych bezpośrednio do dopasowania sterowników do większości urządzeń. Wynika to z faktu, że USB definiuje klasy urządzeń i zwykle sterownik systemowy dla każdej klasy urządzeń jest wystarczający do obsługi urządzeń, które twierdzą, że należą do tej klasy.

Wszystkie klawiatury będą twierdziły, że należą do klasy HID (Human Interface), podobnie jak myszy, tablety i kontrolery gier. Klasa HID ma kilka podklas (klawiatury, myszy itp.), Więc każda z nich jest obsługiwana w oczekiwany sposób.

Większość urządzeń podobnych do dysku twierdzi, że należy do klasy pamięci masowej, a sterownik systemowy działa również dla nich.

Oprócz klasy i podklasy deskryptory obejmują również identyfikator dostawcy (VID), identyfikator produktu (PID) i wersję. Identyfikatory dostawcy są przypisywane przez komitet normalizacyjny (głównie w kolejności wydania, ale niektóre firmy otrzymały specjalne żądania: na przykład dane wywiadowcze to 0x8086). Identyfikatory produktu są przypisywane przez każdego dostawcę, a kombinacja VID i PID musi być unikalna dla każdego wydanego produktu.

Kiedy urządzenie jest instalowane po raz pierwszy, VID, PID, wersja, klasa i podklasa są używane w przewidywalny sposób do wyboru załadowanego sterownika urządzenia. Posiadanie nazw specyficznych dla dostawcy i produktu umożliwia dostawcy dostosowanie urządzenia, które w innym przypadku mogłoby być obsługiwane (prawie) poprawnie przez sterownik systemu magazynowego.

Innym ważnym deskryptorem jest numer seryjny urządzenia. Jeśli urządzenie ma numer seryjny, można je rozpoznać i traktować tak samo po ponownym podłączeniu, nawet jeśli używany jest inny fizyczny port USB. Jest to ważne dla urządzeń pamięci masowej, aby otrzymały taką samą literę dysku, a dla urządzeń takich jak adaptery portów szeregowych i modemy, aby miały takie same oznaczenie portu COM.

Cały proces jest udokumentowany w MSDN , ale szczegóły są rozmieszczone w różnych miejscach.

RBerteig
źródło
Dzięki za wyjaśnienie metodyczne. Bardzo interesujące!
Nathan Long,
3
Godziny, które spędziłem na zbieraniu tych szczegółów z dokumentacji i próbek, były nieoczekiwanym zadaniem, kiedy napisałem swój pierwszy sterownik urządzenia dla systemu Windows. Cieszę się, że mogę podzielić się wynikami tego ...
RBerteig,
7

Pytania :

  • Katalogi: Sterowniki są instalowane w 2 katalogach. Część uruchomiona jest (w większości przypadków) instalowana w% RootDir% \ system32, część informacji o urządzeniu jest instalowana w% RootDir% \ inf. W katalogu informacyjnym dla zainstalowanego / zarejestrowanego sterownika tworzony jest plik OEM * .inf. (* to liczba). W systemie Vista sterownik jest kopiowany do katalogu% RootDir% \ system32 \ driverstore jako odniesienie podczas instalowania jeszcze nie napotkanych urządzeń.
  • Rejestr: sterownik jest instalowany jako usługa trybu jądra. W tym celu tworzone są określone klucze rejestru dla usługi sterownika. Istnieje inne miejsce pod sterownikiem magistrali, w którym odpowiednie urządzenia otrzymują indywidualny klucz instancji urządzenia. W tym kluczu urządzenie zawiera odniesienie do aktualnie używanego sterownika tego urządzenia.
  • „Przybycie” urządzenia: gdy sterownik magistrali znajdzie nowe urządzenie na swojej magistrali, tworzy rejestr kluczy pod własnym kluczem, który odpowiada unikatowemu identyfikatorowi instancji urządzenia, którego można użyć do jednoznacznej identyfikacji urządzenia w systemie. Jeśli ten klucz już istnieje, sterownik magistrali próbuje załadować urządzenie, do którego odwołuje się ten węzeł. Jeśli ten węzeł nie istnieje lub sterownik się nie ładuje, system próbuje znaleźć zgodny sterownik dla urządzenia, skanując zarejestrowane sterowniki urządzeń w folderze% RootDir% \ inf. Sterowniki, które kwalifikują się do tego urządzenia, są wyliczane i sortowane. Najlepszy sterownik jest następnie wybierany i ładowany dla urządzenia.
  • Wyszukiwanie sterowników: najpierw wyszukiwane są sterowniki w katalogu inf. Gdy nie zostanie znaleziony żaden sterownik, system Windows zapyta użytkownika, czy może on dostarczyć sterowniki lub czy powinien wyglądać na serwerze Microsoft. Producenci sterowników mogą zgłaszać swoje sterowniki do włączenia na serwerze sterowników urządzeń Microsoft.

Lunatik ma pierwszą część odpowiedzi, w jaki sposób tak zwany kierowca autobusu znajduje urządzenie.

Krzysztof
źródło
3

Chciałbym polecić dobrą książkę o usb:

  • USB Complete autorstwa Jana Axelsona

Wiem, że o to nie prosiłeś, ale dobrze jest wiedzieć trochę o urządzeniach USB, które mają się połączyć.

Johan
źródło