Come funziona il riconoscimento dei dispositivi USB?


16

Sono curioso di sapere come funziona il riconoscimento dei dispositivi USB in Windows. Mi immagino che sia qualcosa di simile a questo:

  • Quando si collega un dispositivo, viene indicato a Windows "ecco il mio ID dispositivo per dirti cosa sono"
  • Windows cerca di vedere se sono stati installati driver che corrispondono a tale ID dispositivo. Il driver probabilmente dice a Windows come dovrebbe essere chiamato il dispositivo, ad esempio "BlackBerry Curve" o "Canon Printer"
  • In tal caso, associa in qualche modo quel dispositivo a quel driver
  • Altrimenti, cerca un driver corrispondente online (se lo lasci)

Ho ragione? In tal caso, ciò lascia ancora alcune domande.

  • Quando installi i driver, dove vanno? Sono file in una cartella o vengono aggiunti al registro?
  • Cosa sta facendo Windows quando riconosce per la prima volta il dispositivo, pensa e infine dice "il tuo nuovo dispositivo è installato e pronto per l'uso?"
  • Dove Windows cerca i driver mancanti? È nel loro database? I produttori di dispositivi inviano i driver a Microsoft per l'inclusione lì?

Qualcuno può spiegare come funziona davvero questo processo? Inoltre, altri sistemi operativi lo fanno diversamente?

Risposte:


24

Il bus USB è progettato fisicamente in modo che l'atto di inserire (e rimuovere) una spina possa essere riconosciuto dal controller host. Quando si verifica questo evento "plug", il controller host informa il driver del dispositivo che esegue la scansione del bus e chiede a ciascun dispositivo di identificarsi.

Tutti i dispositivi USB contengono una raccolta di informazioni sul dispositivo, denominate descrittori. I descrittori dei dispositivi vengono recuperati da tutti i dispositivi con lo stesso comando. Ciò consente a un driver di dispositivo per il bus USB stesso di chiedere effettivamente a un dispositivo appena connesso di cosa si tratta e si aspetta di ottenere una risposta ragionevole.

Di tutti i descrittori, solo alcuni vengono utilizzati direttamente per abbinare i driver alla maggior parte dei dispositivi. Questo perché USB definisce le classi di dispositivi e di solito il driver di sistema per ciascuna classe di dispositivi è sufficiente per gestire tutti i dispositivi che dichiarano di appartenere a quella classe.

Tutte le tastiere dichiareranno di essere nella classe HID (Human Interface), come ad esempio mouse, tablet e controller di gioco. La classe HID ha diverse sottoclassi (tastiere, mouse, ecc.), Quindi ognuna viene gestita nel modo previsto.

La maggior parte dei dispositivi simili a dischi dichiarerà di essere nella classe di archiviazione di massa e il driver di sistema funziona anche per quelli.

Oltre alla classe e alla sottoclasse, i descrittori includono anche un ID fornitore (VID), un ID prodotto (PID) e una revisione. Gli ID fornitore sono assegnati dal comitato standard (principalmente in ordine di emissione ma alcune aziende hanno ricevuto richieste speciali: intel è 0x8086, ad esempio). Gli ID prodotto sono assegnati da ciascun fornitore e la combinazione di VID e PID deve essere univoca per ciascun prodotto rilasciato.

Quando un dispositivo viene installato per la prima volta, VID, PID, revisione, classe e sottoclasse vengono utilizzati in modo prevedibile per scegliere il driver di dispositivo che viene caricato. La presenza di nomi specifici di fornitori e prodotti consente a un fornitore di personalizzare un dispositivo che altrimenti potrebbe essere gestito (quasi) correttamente dal driver del sistema di magazzino.

Un altro descrittore importante è il numero di serie del dispositivo. Se un dispositivo ha un numero seriale, può essere riconosciuto e trattato allo stesso modo quando ricollegato, anche se viene utilizzata una porta USB fisica diversa. Questo è importante per i dispositivi di archiviazione in modo che ricevano la stessa lettera di unità e per dispositivi come adattatori e modem di porte seriali in modo che ricevano la stessa designazione della porta COM.

L'intero processo è documentato su MSDN , ma i dettagli sono sparsi in vari luoghi.


Grazie per la spiegazione metodica. Molto interessante!
Nathan Long,

3
Le ore trascorse a raccogliere questi dettagli dalla documentazione e dagli esempi è stata un'attività inaspettata quando ho scritto il mio primo driver di dispositivo per Windows. Sono felice di condividere i risultati di questo ...
RBerteig,

7

Domande :

  • Directory: i driver sono installati in 2 directory. La parte in esecuzione viene (nella maggior parte dei casi) installata in% RootDir% \ system32, la parte delle informazioni sul dispositivo viene installata in% RootDir% \ inf. Sotto la directory inf, per un driver installato / registrato viene creato un file oem * .inf. (* è un numero). In Vista, il driver viene copiato nella directory% RootDir% \ system32 \ driverstore come riferimento durante l'installazione di dispositivi non ancora rilevati.
  • Registro: un driver viene installato come servizio in modalità kernel. Per questo alcune chiavi di registro vengono create per il servizio driver. C'è un altro posto sotto il driver del bus, in cui i dispositivi corrispondenti ottengono una chiave di istanza del singolo dispositivo. In questa chiave, il dispositivo ha un riferimento al driver attualmente utilizzato per questo dispositivo.
  • "Arrivo" del dispositivo: quando il driver del bus trova un nuovo dispositivo sul suo bus, crea un registro chiavi sotto la propria chiave che corrisponde a un ID istanza dispositivo unico, che può essere utilizzato per identificare in modo univoco un dispositivo sul sistema. Se questa chiave esiste già, il driver del bus tenta di caricare il dispositivo a cui fa riferimento questo nodo. Quando questo nodo non esiste o il driver non viene caricato, il sistema tenta di trovare un driver compatibile per il dispositivo, eseguendo la scansione dei driver di dispositivo registrati in% RootDir% \ inf. I driver idonei per questo dispositivo vengono enumerati e ordinati. Il driver migliore viene quindi selezionato e caricato per il dispositivo.
  • Ricerca driver: i driver vengono cercati per primi nella directory inf. Quando non viene trovato alcun driver, Windows chiede all'utente se è in grado di fornire driver o se deve essere presente sul server Microsoft. I produttori di driver possono inviare i loro driver per l'inclusione sul server dei driver di dispositivo Microsoft.

Lunatik ha la prima parte della risposta, come il cosiddetto bus driver trova il dispositivo.


3

Vorrei raccomandare un buon libro sull'USB:

  • USB completo di Jan Axelson

So che non l'hai chiesto, ma è bene sapere qualcosa sui dispositivi USB che dovrebbero connettersi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.