¿Cómo funciona el reconocimiento de dispositivos USB?

16

Tengo curiosidad por saber cómo funciona el reconocimiento de dispositivos USB en Windows. Me imagino que es algo como esto:

  • Cuando conecta un dispositivo, le dice a Windows "aquí está mi ID de dispositivo para decirle lo que soy"
  • Windows busca ver si se han instalado controladores que coincidan con la ID de ese dispositivo. El controlador probablemente le dice a Windows cómo debe llamarse el dispositivo, como "BlackBerry Curve" o "Canon Printer"
  • Si es así, de alguna manera asocia ese dispositivo con ese controlador
  • De lo contrario, busca un controlador coincidente en línea (si lo permite)

Estoy en lo cierto? Si es así, eso todavía deja algunas preguntas.

  • Cuando instala controladores, ¿a dónde van? ¿Están los archivos en una carpeta o se agregan al registro?
  • ¿Qué está haciendo Windows cuando reconoce el dispositivo por primera vez, piensa y finalmente dice "su nuevo dispositivo está instalado y listo para usar"?
  • ¿Dónde busca Windows los controladores faltantes? ¿Está en su propia base de datos? ¿Los fabricantes de dispositivos envían controladores a Microsoft para incluirlos allí?

¿Alguien puede explicar cómo funciona realmente este proceso? Además, ¿otros sistemas operativos hacen esto de manera diferente?

Nathan Long
fuente

Respuestas:

24

El bus USB está diseñado físicamente para que el controlador host reconozca el acto de insertar (y quitar) un enchufe. Cuando ocurre este evento de "enchufe", el controlador host informa a su controlador de dispositivo que escanea el bus y le pide a cada dispositivo que se identifique.

Todos los dispositivos USB contienen una recopilación de información sobre el dispositivo, denominada descriptores. Los descriptores de dispositivo se recuperan de todos los dispositivos con el mismo comando. Esto permite que un controlador de dispositivo para el bus USB en sí mismo pregunte de manera efectiva a un dispositivo recién conectado qué es y espera obtener una respuesta razonable.

De todos los descriptores, solo unos pocos se usan directamente para hacer coincidir los controladores con la mayoría de los dispositivos. Esto se debe a que el USB define clases de dispositivos, y generalmente el controlador del sistema para cada clase de dispositivo es suficiente para manejar cualquier dispositivo que afirme estar en esa clase.

Todos los teclados afirman estar en la clase HID (interfaz humana), al igual que los ratones, tabletas y controladores de juegos, por ejemplo. La clase HID tiene varias subclases (teclados, ratones, etc.), por lo que cada una se maneja de la manera esperada.

La mayoría de los dispositivos con forma de disco afirman estar en la clase de almacenamiento masivo, y el controlador del sistema también funciona para ellos.

Además de la clase y la subclase, los descriptores también incluyen un ID de proveedor (VID), un ID de producto (PID) y una revisión. El comité de normas asigna las ID de los proveedores (principalmente en orden de emisión, pero algunas empresas recibieron solicitudes especiales: la inteligencia es 0x8086, por ejemplo). Las identificaciones de los productos son asignadas por cada proveedor, y la combinación de VID y PID debe ser única para cada producto lanzado.

Cuando se instala un dispositivo por primera vez, el VID, el PID, la revisión, la clase y la subclase se utilizan de manera predecible para elegir el controlador del dispositivo que se carga. Tener nombres específicos de proveedor y producto hace posible que un proveedor personalice un dispositivo que de otro modo podría ser manejado (casi) correctamente por el controlador del sistema de valores.

Otro descriptor importante es el número de serie del dispositivo. Si un dispositivo tiene un número de serie, puede reconocerse y tratarse de la misma manera cuando se vuelve a enchufar, incluso si se utiliza un puerto USB físico diferente. Esto es importante para los dispositivos de almacenamiento para que tengan la misma letra de unidad asignada, y para dispositivos como adaptadores de puerto serie y módems para que se les asigne la misma designación de puerto COM.

Todo este proceso está documentado en MSDN , pero los detalles están distribuidos en una variedad de lugares.

RBerteig
fuente
Gracias por la explicación metódica. ¡Muy interesante!
Nathan Long
3
Las horas que pasé obteniendo estos detalles de la documentación y las muestras fue una tarea inesperada cuando escribí mi primer controlador de dispositivo para Windows. Estoy contento de compartir los resultados de esa ...
RBerteig
7

Preguntas:

  • Directorios: los controladores se instalan en 2 directorios. La parte en ejecución se instala (en la mayoría de los casos) en% RootDir% \ system32, la parte de información del dispositivo se instala en% RootDir% \ inf. Debajo del directorio inf, para un controlador instalado / registrado se crea un archivo oem * .inf. (* es un número). En Vista, el controlador se copia en el directorio% RootDir% \ system32 \ driverstore como referencia al instalar dispositivos que aún no se encuentran.
  • Registro: un controlador se instala como un servicio en modo kernel. Para esto, se crean ciertas claves de registro para el servicio del controlador. Hay otro lugar debajo del controlador de bus, donde los dispositivos correspondientes obtienen una clave de instancia de dispositivo individual. En esta clave, el dispositivo tiene una referencia al controlador utilizado actualmente para este dispositivo.
  • 'Llegada' del dispositivo: cuando el conductor del bus encuentra un nuevo dispositivo en su bus, crea un registro de claves bajo su propia clave que corresponde a una identificación de instancia de dispositivo única, que se puede utilizar para identificar de forma única un dispositivo en el sistema. Si esta clave ya existe, el controlador del bus intenta cargar el dispositivo al que hace referencia este nodo. Cuando este nodo no existe o el controlador no se carga, el sistema intenta encontrar un controlador compatible para el dispositivo, escaneando los controladores de dispositivo registrados en% RootDir% \ inf. Los controladores que califican para este dispositivo se enumeran y ordenan. El mejor controlador se selecciona y carga para el dispositivo.
  • Búsqueda de controladores: los controladores se buscan primero en el directorio inf. Cuando no se encuentra ningún controlador, Windows pregunta al usuario si puede proporcionar controladores o si debe buscar en el servidor de Microsoft. Los fabricantes de controladores pueden enviar sus controladores para su inclusión en el servidor de controladores de dispositivos de Microsoft.

Lunatik tiene la primera parte de la respuesta, cómo el llamado conductor del autobús encuentra el dispositivo.

Christopher
fuente
3

Me gustaría recomendar un buen libro sobre usb:

  • USB completo por Jan Axelson

Sé que no pediste esto, pero es bueno saber un poco sobre los dispositivos usb que se supone que deben conectarse.

Johan
fuente