Como funciona o reconhecimento de dispositivos USB?

15

Estou curioso em saber como o reconhecimento de dispositivos USB funciona no Windows. Eu imagino é algo assim:

  • Quando você conecta um dispositivo, ele informa ao Windows "aqui está meu ID de dispositivo para dizer a você o que sou"
  • O Windows verifica se algum driver foi instalado e corresponde ao ID do dispositivo. O driver provavelmente diz ao Windows como o dispositivo deve ser chamado - como "BlackBerry Curve" ou "Canon Printer"
  • Se sim, de alguma forma associa esse dispositivo com esse driver
  • Caso contrário, procura um driver de correspondência on-line (se você permitir)

Estou certo? Se assim for, 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 pela primeira vez, pensa e finalmente diz "seu novo dispositivo está instalado e pronto para uso?"
  • Onde o Windows procura drivers ausentes? Está no banco de dados deles? Fabricantes de dispositivos enviam drivers para a 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?

    
por Nathan Long 16.09.2009 / 12:20

3 respostas

22

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" ocorre, o controlador host informa seu driver de dispositivo que varre 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 barramento USB em si peça efetivamente a um dispositivo recém-conectado o que ele é 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 pretendem estar na classe HID (Human Interface), assim como mouses, tablets e controladores de jogos, por exemplo. A classe HID tem várias subclasses (teclados, mouses, etc.), então cada uma é manipulada da maneira esperada.

A maioria dos dispositivos semelhantes a discos afirmam estar na classe Mass Storage, e o driver do sistema também funciona para eles também.

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

Quando um dispositivo é instalado pela primeira vez, o VID, PID, revisão, classe e subclasse são usados de uma maneira previsível para escolher o driver de dispositivo que é carregado. Ter nomes específicos de fornecedores e produtos possibilita que um fornecedor personalize um dispositivo que poderia ser manipulado (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 se uma porta USB física diferente for usada. Isso é importante para dispositivos de armazenamento para que eles recebam a mesma letra de unidade atribuída e para dispositivos como adaptadores de porta serial e modems, de forma que recebam a mesma designação de porta COM.

Todo este processo está documentado em MSDN , mas os detalhes estão espalhados em vários lugares.

    
por 18.09.2009 / 10:33
6

Perguntas:

  • Diretórios: Os drivers são instalados em dois diretórios. A parte em execução fica (na maioria dos casos) instalada em% RootDir% \ system32, a parte de informações do dispositivo é instalada em% RootDir% \ inf. Sob o 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 de modo kernel. Para isso, determinadas chaves de registro são criadas para o serviço de driver. Há outro local sob o driver de 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 atualmente usado para este dispositivo.
  • Dispositivo 'chegada': Quando o driver de barramento encontra um novo dispositivo em seu barramento, ele cria um registro de chave em sua própria chave que corresponde a um ID de instância de dispositivo exclusivo, que pode ser usado para identificar dispositivo no sistema. Se esta chave já existir, o driver de barramento tentará carregar o dispositivo referenciado por este nó. Quando esse nó não existe ou o driver não é carregado, o sistema tenta encontrar um driver compatível para o dispositivo, verificando os drivers de dispositivo registrados em% RootDir% \ inf. Os drivers que se qualificam para este dispositivo são enumerados e classificados. O melhor driver é selecionado e carregado para o dispositivo.
  • Pesquisa de motoristas: 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 do driver de dispositivo da Microsoft.

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

    
por 16.09.2009 / 14:31
3

Eu gostaria de recomendar um bom livro sobre o usb:

  • USB concluído por Jan Axelson

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

    
por 16.09.2009 / 17:05

Tags