Como o reconhecimento de dispositivo USB funciona?

16

Estou curioso para saber como o reconhecimento de dispositivo USB funciona no Windows. Eu imagino que é algo assim:

  • Quando você conecta um dispositivo, ele informa ao Windows "aqui está o código do meu dispositivo para dizer o que eu sou"
  • O Windows procura verificar se algum driver foi instalado que corresponde à ID do dispositivo. O driver provavelmente diz ao Windows como o dispositivo deve ser chamado - como "BlackBerry Curve" ou "Canon Printer"
  • Nesse caso, de alguma forma, associa esse dispositivo a esse driver
  • Caso contrário, ele procura um driver correspondente online (se você permitir)

Estou certo? Nesse caso, isso ainda deixa algumas perguntas.

  • Quando você instala drivers, para onde eles vão? Eles são arquivos em uma pasta ou são adicionados ao registro?
  • O que o Windows está fazendo quando reconhece o dispositivo, pensa e finalmente diz "seu novo dispositivo está instalado e pronto para uso?"
  • Onde o Windows procura drivers ausentes? Está em seu próprio banco de dados? Os fabricantes de dispositivos enviam drivers à Microsoft para inclusão lá?

Alguém pode explicar como esse processo realmente funciona? Além disso, outros sistemas operacionais fazem isso de maneira diferente?

Nathan Long
fonte

Respostas:

24

O barramento USB é fisicamente projetado para que o ato de inserir (e remover) um plugue possa ser reconhecido pelo controlador host. Quando esse evento "plug" acontece, o controlador host informa seu driver de dispositivo que verifica o barramento e solicita que cada dispositivo se identifique.

Todos os dispositivos USB contêm uma coleção de informações sobre o dispositivo, denominadas descritores. Os descritores de dispositivos são recuperados de todos os dispositivos com o mesmo comando. Isso permite que um driver de dispositivo para o próprio barramento USB efetivamente pergunte a um dispositivo recém-conectado o que é e espere obter uma resposta razoável.

De todos os descritores, apenas alguns são usados ​​diretamente para corresponder os drivers à maioria dos dispositivos. Isso ocorre porque o USB define classes de dispositivos e, geralmente, o driver do sistema para cada classe de dispositivo é suficiente para manipular todos os dispositivos que afirmam estar nessa classe.

Todos os teclados alegam estar na classe HID (Interface Humana), assim como ratos, tablets e controladores de jogo, por exemplo. A classe HID possui várias subclasses (teclados, mouses, etc.), portanto, cada uma é tratada da maneira esperada.

A maioria dos dispositivos do tipo disco diz estar na classe de armazenamento em massa, e o driver do sistema também funciona para eles.

Além da classe e subclasse, os descritores também incluem um ID do fornecedor (VID), um ID do produto (PID) e uma revisão. Os IDs do fornecedor são atribuídos pelo comitê de padrões (principalmente na ordem de emissão, mas algumas empresas recebem solicitações especiais: intel é 0x8086, por exemplo). As IDs do produto são atribuídas por cada fornecedor, e a combinação de VID e PID deve ser exclusiva para cada produto liberado.

Quando um dispositivo é instalado pela primeira vez, o VID, o PID, a revisão, a classe e a subclasse são usados ​​de maneira previsível para escolher o driver de dispositivo carregado. Ter nomes específicos de fornecedor e produto permite que um fornecedor personalize um dispositivo que, de outra forma, poderia ser tratado (quase) corretamente pelo driver do sistema de estoque.

Outro descritor importante é o número de série do dispositivo. Se um dispositivo tiver um número de série, ele poderá ser reconhecido e tratado da mesma forma quando conectado novamente, mesmo que uma porta USB física diferente seja usada. Isso é importante para os dispositivos de armazenamento, para que eles recebam a mesma letra de unidade e para dispositivos como adaptadores de porta serial e modems, para que recebam a mesma designação de porta COM.

Todo esse processo está documentado no MSDN , mas os detalhes estão espalhados por vários lugares.

RBerteig
fonte
Obrigado pela explicação metódica. Muito interessante!
Nathan Long
3
As horas que passei recolhendo esses detalhes da documentação e das amostras foram uma tarefa inesperada quando escrevi meu primeiro driver de dispositivo para Windows. Fico feliz em compartilhar os resultados de que ...
RBerteig
7

Questões :

  • Diretórios: os drivers são instalados em 2 diretórios. A parte em execução é instalada (na maioria dos casos) em% RootDir% \ system32, a parte de informações do dispositivo é instalada em% RootDir% \ inf. No diretório inf, para um driver instalado / registrado, um arquivo oem * .inf é criado. (* é um número). No Vista, o driver é copiado para o diretório% RootDir% \ system32 \ driverstore como referência ao instalar dispositivos ainda não encontrados.
  • Registro: Um driver é instalado como um serviço no modo kernel. Para isso, determinadas chaves do Registro são criadas para o serviço de driver. Há outro local sob o driver do barramento, onde os dispositivos correspondentes obtêm uma chave de instância de dispositivo individual. Nesta chave, o dispositivo tem uma referência ao driver usado atualmente para este dispositivo.
  • 'Chegada' do dispositivo: quando o driver do barramento encontra um novo dispositivo em seu barramento, ele cria um registro de chave com sua própria chave, que corresponde a um ID de instância de dispositivo exclusivo, que pode ser usado para identificar exclusivamente um dispositivo no sistema. Se essa chave já existir, o driver do barramento tentará carregar o dispositivo referenciado por este nó. Quando esse nó não existe ou o driver não carrega, o sistema tenta encontrar um driver compatível para o dispositivo, verificando os drivers de dispositivo registrados em% RootDir% \ inf. Os drivers qualificados para este dispositivo são enumerados e classificados. O melhor driver é então selecionado e carregado para o dispositivo.
  • Pesquisa de driver: os drivers são pesquisados ​​primeiro no diretório inf. Quando nenhum driver é encontrado, o Windows pergunta ao usuário se ele pode fornecer drivers ou se deve procurar no servidor da Microsoft. Os fabricantes de drivers podem enviar seus drivers para inclusão no servidor de driver de dispositivo da Microsoft.

Lunatik tem a primeira parte da resposta, como o chamado motorista de ônibus encontra o dispositivo.

Christopher
fonte
3

Gostaria de recomendar um bom livro sobre usb:

  • USB Complete por Jan Axelson

Sei que você não pediu isso, mas é bom saber um pouco sobre os dispositivos USB que devem se conectar.

Johan
fonte