Soporte USB Linux - LPI 101

El bus serie universal (USB) es una arquitectura de comunicación diseñada para conectar dispositivos a un PC. Estos dispositivos se dividen en cuatro clases:

  • Dispositivos de visualización
  • Dispositivos de comunicación
  • Dispositivos de audio
  • Dispositivos de almacenamiento masivo
  • Dispositivos de interfaz humana (HID)

Los dispositivos se conectan a un puerto USB que es controlado por un controlador USB. El soporte para controladores USB está presente en el kernel de Linux desde la versión 2.2.7 (El Linux Linux sub-system HOWTO)

Controladores de host

Hay 3 tipos de controladores de host USB:

Host Controler Kernel Module
OHCI (Compaq) usb-ohci.o
UHCI (Intel) usb-uhci.o
EHCI (USB v 2.0) ehci-hdc.o

Una vez que un dispositivo USB está conectado a un PC podemos listar los dispositivos con lsusb:


Hotplugging

Hotplug es un mecanismo utilizado para mantener el estado del sistema operativo actualizado cuando se añaden o eliminan dispositivos de hardware conectables. En la mayoría de los casos, el kernel indica un evento pasando parámetros al script /sbin/hotplug.
Esta secuencia de comandos de hotplug ejecuta todos los scripts en /etc/hotplug.d (el predeterminado es default.hotplug) que a su vez inicia el agente apropiado listado en /etc/hotplug. Los nombres de los agentes corresponden a diferentes tipos de archivos adjuntos, como ieee1394, net, pci, scsi y usb.

El siguiente registro describe lo que sucede cuando se inicializa una cámara USB:

Etapa 1: Los módulos del kernel USB identifican el evento USB y el ID del proveedor / producto:
13:26:19 kernel: hub.c: nuevo dispositivo USB 00: 07.2-1, dirección asignada 5
13:26:19 kernel: usb.c: El dispositivo USB 5 (vend /prod 0x4a9/0x3058) no es reclamado por ningún controlador activo.

Etapa 2: Los argumentos de evento se pasan a default.hotplug
13:26:19 default.hotplug [10507]: argumentos (usb) env (DEVFS=/proc/bus/usb OLDPWD=/
PATH=/bin:/sbin:/usr/sbin:/usr/bin ACTION=agrega PWD=/etc/hotplug HOME=/SHLVL=2
DEVICE=/proc/bus/usb/001/005 PRODUCTO=4a9/3058/1 TYPE=255/255/255 DEBUG= sí _=/bin/env)

Etapa 3: El usb.agent asocia el producto a una usbcam (usando usb.usermap)
13:26:19 default.hotplug [10507]: invocar /etc/hotplug/usb.agent ()
13:26:23 usb.agent [10507]: Configuración usbcam para el producto USB 4a9/3058/1
13:26:23 usb.agent [10507]: Instalación del módulo usbcam para el producto USB 4a9/3058/1
13:26:38 devlabel: servicio devlabel iniciado/reiniciado

De esto podemos ver que el Paso 1 implica los módulos del kernel y el Paso 2-3 involucra el mecanismo del hotplug. También se puede ver que el mapa USB correcto debe estar disponible para inicializar completamente el dispositivo.

La herramienta usbmgr

En los sistemas Debian se proporciona una alternativa al hotplug con el paquete usbmgr. Los archivos principales son:

/usr/sbin/usbmgr               El daemon que escucha los eventos relacionados con USB
/usr/sbin/dump_usbdev     Herramienta para enumerar dispositivos USB (similar a lsusb)
/etc/usbmgr/usbmgr.conf   Archivo de configuración que contiene ID de proveedor / producto

Publicar un comentario

0 Comentarios