Windows utilizza un'architettura Plug and Play: si inserisce un dispositivo USB e Windows registra che un dispositivo è stato connesso. Invia una richiesta USB di basso livello al dispositivo e, in base alla risposta del dispositivo, decide quale driver caricare. Questo driver si presenta sotto forma di un file xxx.sys compilato e viene caricato nello spazio del kernel. Windows decide quale xxx.sys caricare in base al file * .inf fornito con il driver del dispositivo.
Questi file hanno sezioni come questo:
[Manufacturer]
%Manufacturer% = DeviceInstall
[DeviceInstall]
"some usb dev"=OTHER_SECTION_DEV, USB\Vid_XXXX&Pid_yyyy
# This is where windows learns to match this information
# to your device, using the product id (Pid) and the
# vendor id (Vid) that Windows gets back during the
# low level USB DeviceDescriptor request
[OTHER_SECTION_DEV]
CopyFiles = xxx.sys, 10,system32\drivers
(una descrizione più dettagliata su ciò che è in inf
file si trovano sopra il http://www.osronline.com/ddkx/install/inf-format_2k8i.htm)
Uno sguardo dettagliato il processo di enumerazione USB :
- Dispositivo USB inserito
- USB Request Bus Driver (questi comandi vengono inviati tramite cavo USB, utilizzare un registratore USB per vederli):
- GetDescriptor (Device)
- GetDescriptor (Configuration)
- GetDescriptor (String iSerialNumber), usato come dispositivo di ID istanza
- GetDescriptor (String iProduct), utilizzati nel "nuovo hardware stati identificati" popup
- il PnP (Plug and Play) direttore è informato che un dispositivo è stato aggiunto dai conducenti di autobus.
- Il gestore PNP quindi chiede al conducente di autobus per informtion dispositivo utilizzando una richiesta PNP chiedendo:
- stringa DeviceID, che rappresenta il Venditore USB e ID prodotto, stringa
- HardwareIDs,
- CompatibleIDs stringa, che rappresenta la Classe interfaccia, Sottoclasse e Protocollo del dispositivo USB e
- InstanceID stringa, che rappresenta l'uid per questo particolare dispositivo all'interno dell'insieme di tutte le istanze con lo stesso compatibile collegato al computer.
Per qualsiasi dispositivo USB collegato è possibile vedere queste stringhe utilizzando la Gestione periferiche:
- Aprire Gestione periferiche (menu di Windows -> "Gestione periferiche", o il pannello di controllo -> " Sistema "->" Hardware "->" Device Manager ")
- quindi utilizzare il menu" Visualizza "per passare a" Dispositivo tramite connessione "
- aprire" ACPI [...] "->" PCI bus "/"Complesso di root PCI Express" -> "[...] Controller host USB [...]"
- espandere qualsiasi voce sotto il controller host, e per qualsiasi dispositivo elencato, fare clic destro per ottenere le loro proprietà, aprire la scheda "dettagli" e quindi utilizzare il menu a discesa proprietà per trovare "Id Hardware", "Compatibile ids", "Device instance ID", "abbinabili ID dispositivo", "Servizio", ecc
ad esempio, ho un dispositivo di memorizzazione USB con Device Id = usb\class_08&subclass_06&prot_50
collegato, e questa stringa può essere abbinato ad un .inf
file che è stato aggiunto all'elenco delle informazioni note quando è stato installato il driver per questo dispositivo. Questo file ha una stringa Service = USBSTOR
, quindi sappiamo che usbstor.sys
viene utilizzato per interfacciare con questo dispositivo di archiviazione di massa USB.
Continuiamo con il processo di abbinamento.
- Il PNP Manager tenta di determinare se dispositivo è già stato "installato":
- Ricerca il Registro di sistema per una chiave corrispondente al "DeviceInstance ID" per vedere quale servizio gestisce l'interfacciamento con questo dispositivo. In particolare, esso cerca per questo nel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
Per disco sul tasto, è possibile vedere qualcosa di simile:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_0781&Pid_5406\0775555ACA54ADE3]
"Service"="USBSTOR"
- Il PNP manager poi carica il driver associati sulla base di una corrispondenza tra le stringhe che vede nelle richieste PNP al dispositivo e i dati dal database inf:
- posizione del database inf è c: \ WI Ndows \ inf \
- driver si trovano qui C: \ WINDOWS \ system32 \ drivers
- Se non è possibile eseguire un corrispondente in questo modo, chiederà all'utente di cercare un pilota da usare al posto.
Per la scrittura di driver Il mio consiglio è:
- Non iniziare con attuazione HID (Human Interface Device) i dispositivi, perché si può causare finestre per cercare di applicare il driver personalizzato come autista per il tuo mouse o la tua tastiera già installati e perderne l'accesso.
- Non caricare i driver nella vostra macchina reale:
- uso di una macchina virtuale e installare i driver lì. Impostare un debugger del kernel per la macchina virtuale: http://www.codeproject.com/KB/winsdk/KernelModeDebuggerSetup.asp
- Si può anche provare a utilizzare una scheda fisica come ad esempio USB-FX2 Learning Kit di OSR
fonte
2011-03-07 13:36:39
dispositivo USB di simulazione per la piattaforma linux http://stackoverflow.com/a/43917529/6180077 –