You are on page 1of 14

Administracion de Puertos USB en Linux

Como obtener detalles de los dispositivos conectados a los puertos USB


En la presente gua se mostrar como listar los dispositivos USB en Linux y sus propiedades como ser
velocidad de transmisin de datos, BUS, clase, tipo, etc.
Que es USB?
USB (Universal Serial Bus), es el estandar desarrollado para reemplazar a los Buses seriales previamente
disponibles. Fue una solucin para eliminar las restricciones impuestas por los fabricantes de puertos de
hardware, debido a que USB es identico y compatible a traves de los dispositivos de diferentes fabricantes.
USB resuelve un problema ms: la velocidad. Los dispositivos USB alcanzan una velocidad de transmisin
de datos de hasta 5 GB/s en escritura, en tanto que dispositivos PCI tienen velocidades menores.
Dependiendo del firmware, son categorizados en: USB 1.0, USB 2.0 y USB 3.0.
Como administradores de sistemas Linux debemos saber los detalles del bus USB asi como de los
dispositivos conectados a traves de ellos. En esta gua veremos como usar el comando lsusb para desplegar
propiedades de los puertos USB.
Aprendiendo el comando lsusb con ejemplos
Ejemplo 1: Listar todos los puertos USB disponibles
lsusb
Salida:
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 05c8:021e Cheng Uei Precision Industry Co., Ltd (Foxlink)
Bus 001 Device 007: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth
Bus 002 Device 003: ID 0781:5567 San Disk Corp. Cruzer Blade
Entendamos en detalle la salida mostrada mas arriba.
Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blad
Bus002: Este es el nmero de Bus en el cual el dispositivo SanDisk esta conectado.
Device003: Este es el tercer dispositivo conectado al bus 002, los otros dos dispositivos son Intel Corp.
Integrated Rate Matching Hub y Linux Foundation 2.0 root hub.
ID 0781:5567: es el nmero asignado a este SanDisk, el primer nmero indica el ID de fabricante; el
segundo, el ID de dispositivo.
SanDisk Corp. Cruzer Blad: Es el nombre de fabricante y el de dispositivo.
Ejemplo 2: Ver el numero de dispostivos USB disponibles en tu computador en los cuales podemos conectar
dispositivos USB.
find /dev/bus

Salida:
/dev/bus/
/dev/bus/usb
/dev/bus/usb/002
/dev/bus/usb/002/006
/dev/bus/usb/002/005
/dev/bus/usb/002/004
/dev/bus/usb/002/002
/dev/bus/usb/002/001
/dev/bus/usb/001
/dev/bus/usb/001/007
/dev/bus/usb/001/003
/dev/bus/usb/001/002
/dev/bus/usb/001/001
Esos puertos pueden ser internos o externos.
Ejemplo: Obtener informacin detallada de un dispositivo USB conectado a una computadora. Supongamos
que quiero ver informacin acerca del dispositivo /dev/bus/usb/002/005, usando el siguiente comando:
lsusb -D /dev/bus/usb/002/005
Salida:
Device: ID 0951:1643 Kingston Technology Data Traveler G3 4GB
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0951 Kingston Technology
idProduct 0x1643 DataTraveler G3 4GB
bcdDevice 1.00
iManufacturer 1

iProduct 2
iSerial 3
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0

Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Para obtener informacin sobre estos parametros ir al Apendice
Ejemplo 3: Listar todos los puertos USB disponibles y los dispositivos conectados usando verbosidad.
lsusb -v
Salida:
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x8087 Intel Corp.
idProduct 0x0024 Integrated Rate Matching Hub
bcdDevice 0.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9

bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 12

Ejemplo 4: Listar todos los dispositivos de almacenamiento masivo en tu sistema.


lsusb -v | grep -Ei '(idVendor|Mass Storage)'
Salida:

idVendor 0x2006
bInterfaceClass 8 Mass Storage
idVendor 0x0781 SanDisk Corp.
bInterfaceClass 8 Mass Storage
idVendor 0x0951 Kingston Technology
bInterfaceClass 8 Mass Storage
De la lista de arriba encontramos que hay un total de tres dispositivos de almacenamiento masivo presentes
en la computadora.
Ejemplo 5: Ver la versin de protocolo de los dispositivos USB.
lsusb -v | grep -i bcdusb
Salida:
bcdUSB 1.10
bcdUSB 2.00
bcdUSB 2.00
bcdUSB 2.00
Dependiendo de la versin, la velocidad vara. Abajo te doy el detalle para que tengas una clara idea acerca
de la velocidad asociada a cada versin:
USB 1.10

12Mb/s

USB 2.00

480Mb/s

USB 3.00

5Gb/s

Ejemplo 6: Encontrar velocidades de transmision soportadas por los puertos USB


lsusb -t
Salida:
2-1.1:1.1: No such file or directory
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
|__ Port 1: Dev 6, If 0, Class=stor., Driver=usb-storage, 480M
|__ Port 1: Dev 6, If 1, Class=vend., Driver=, 480M
|__ Port 2: Dev 7, If 0, Class=stor., Driver=usb-storage, 480M
|__ Port 3: Dev 5, If 0, Class=stor., Driver=usb-storage, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
|__ Port 3: Dev 3, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M

|__ Port 3: Dev 3, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
|__ Port 4: Dev 7, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
|__ Port 4: Dev 7, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M

Apendice
Descriptores USB
Todos los dispositivos USB tienen una jerarqua de descriptores, los cuales describen al host informacin de
qu el dispsitivo es, quin lo hizo, que versin de USB soporta, cuntas maneras de ser configurado tiene, el
nmero de endpoints y sus tipos, etc.
Los descriptores USB ms comunes son:
Descriptores de dispositivo
Descriptores de Configuracin
Descriptores de Interfaz
Descriptores Endpoint
Descriptores de Cadena
Los dispositivos USB pueden tener solo un Descriptor de Dispositivo. El Descriptor de Dispositivo, incluye
informacin como ser la version de USB para la cual el dispositivo ha sido compilado, los IDs de Vendedor y
Dispositivo usando estos para la carga de drivers apropiados, el nmero de posibles configuraciones que el
dispositivo puede tener. El numero de configuraciones posibles describe tambien el nuemro de ramas de
descriptores que siguen.
Un descriptor de configuracin especifica valores como la cantidad de energa que esta configuracin usa, si
el dispositivo es alimentado electricamente por si mismo o por bus, y el nmero de interfaces que este tiene.
Cuando un dispositivo es enumerado, el host lee la informacion del Descriptor de Dispositivo y toma una
decisin de que configuracin activa. Solo esposible una configuracin activa a la vez para el dispositivo.
Por ejemplo, es posible tener un dispositivo de alto consumo de energa alimentada por Bus o alimentada por
si misma. Si el host esta conectado a la red elctrica, el driver de dispositivo puede elegir usar la
configuracin de alimentar al dispositivo mediante bus, en cambio si el host es una laptop esta podra elegir
usar la segunda configuracin (aliementada a s misma) requiriendo al usuario conectar el dispositivo a la red
elctrica.
Las opciones de configuracin no estn limitadas a las maneras de alimentacin. Todas las configuraciones
podran tener en comun la misma forma de alimentacin y flujo de corriente, pero tener diferentes interfaces
o combinaciones de Endpoints. Cabe notar que el cambio de configuracin requiere que toda actividad en
cada Endpoint sea detenida. Debido a que USB ofrece flexibilidad en este ltimo aspecto, muchos
dispositivos tienen ms de una configuracin posible.

Un Descriptor de Interfaz puede ser visto como cabecera de los Endpoints, en un grupo funcional que ejecuta
una una tarea especifica del dispositivo. Por ejemplo tu podras tener un dispositivo multifuncin
fax/scanner/impresora. El Descriptor de Interfaz 1, podra describir los endpoints de la funcin de Fax; el
descriptor de interfaz 2, la funcion de scanner; el descriptor de interfaz 3, la funcin de impresora. Un
dispositivo puede tener habilitados uno o ms descriptores de interfaz al mismo tiempo.
Los Decriptores de Interfaz tienen un campo llamado bInterfaceNumber que especifica el numero de
interfaz; y el campo bAlternateSetting, el cual permite a una interfaz cmabiar de configuracin al vuelo (on
the fly). Por ejemplo podriamos tener un dispositivo con dos interfaces, interfaz 1 e interfaz 2. Interfaz 1
tiene como bInterfaceNumber el cero, el cual indica que es el descriptor de la primera interfaz y
bAlternativeSetting en cero.
Interfaz 2, deberia tener como bInterfaceNumber el valor 1 indicando que es la segunda interfaz, y como
bAlternativeSetting el valor cero (valor por defecto). Podriamos pensar en un tercer descriptor que asi como
el anterior tendria un valor de numero de interfaz de 1 (bInterfaceNumber=1), indicando que es la segunda
interfaz pero esta vez con bAlternativeSetting=1, indicando que este descriptor de interfaz usa una
configuracin alternativa, y no asi la configuracin por defecto.
En cuanto la configuracion esta activa, las dos primeras descriptores de interfaz con bAlternativeSettings=0
son usadas. Sin embargo durante esta operacin el host podra enviar una peticin SetInterface dicatando el
cmabio de configuracin de la interfaz 1 a adoptar una configuracin alternativa, habilitando asi el otro
decriptor de interfaz.

Esto tiene la ventaja de, teniendo dos configuraciones, en las cuales podriamos transmitir datos a traves de la
interfaz 0 mientras cambiamos las configuraciones del endpoint asociadas con la interfaz 1 sin afectar la
interfaz 0.
Cada descriptor de endpoint es usada para especificar el tipo de tranferencia, direccin, intervalo de consulta
y tamao mximo de paquetes para cada enpoint. El endpoint 0, es asumido como el endpoint de control por
defecto, y nunca tiene un descriptor asociado a l.
Composicin de descriptores USB
Todos los descriptores tienen un formato comn. El primer byte especifica el tamao del decriptor, el
segundo byte indica el tipo de descriptor. Si la longitud del descriptor es mas pequea que la definida por una
espcificacin, entonces el host ignora el decriptor. Si la longitud es mayor, el host ignora los bytes extra y
busca por el decriptor que sigue.

Descriptores de Dispositivo
El decriptor de dispositivo de un dispositivo USB, representa el dispositivo entero. Como resultado un
dispositivo solo puede tener un decriptor de estos. Este especifica aspectos bsicos, informacin muy
importante acerca del dispositivo como ser la version USB soportada, el mximo tamao de paquetes, IDs de
vendedor y dispositivo, y el numero de posibles configuraciones que el dispositivo posee. El formato del
decriptor de dispositivo es mostrado a continuacin:

bcdUSB: este campo resporta la mxima versin USB soportada por el dispositivo. El valor es un valor
decimal codificado como binario con un formato 0xJJMN donde JJ es la versin soportada, M es la sub
versin y N es el numero de la sub-subversin. Por ejemplo USB 2.0 es reportada como 0x0200, USB 1.1
como 0x0110, USB 1.0 como 0x0100.
bDeviceClass, bDeviceSubClass y bDeviceProtocol : son usados por el sistema operativo para encontrar una
clase de driver para tu dispositivo. Tipicamente solo el bDeviceSubClass es configurada a nivel de
dispositivo. La mayora de las especificaciones de clase escogen ser identificadas a si mismas a nivel de
interfaz y como resultado configuran el bDeviceClass como 0x00. Esto permite a un dispositivo soportar
multiples clases.
BmaxPacketSize: Reporta el mximo tamao de paquete para el endpoint 0. Todos los dispositivos deben
tener un endpoint 0.

idVendor y idProduct: Son usados por el sistema operativo para encontrar un driver para tu dispositivo. El ID
de vendedor es asignado por USB-IF.
bcdDevice: tiene el mismo formato que el bcdUSB y es usad para proveer el numero de versin del
dispositivo. Este nmero es asignado por el desarrollador.
Tres cadenas de exto son provistas para dar detalles sobre el fabricante, producto y nmero de serie. No hay
requerimientos para estas cadenas de texto. Si ningn descriptor de texto es usado un 0 debe existir en este
campo.
bnumConfigurations: define el nmero de configuraciones que el dispositivo soporta a la velocidad actual.
Descriptores de configuracin
Un dispositivo USB puede tener muchas diferentes configuraciones, sin embargo la mayora de los
dispositivos son simples y solo tienen una. El descriptor de configuracin especifica como el dispositivo es
energizado, cual es el mximo consumo de potencia, y el nmero de configuraciones que tiene. Es posible
que tenga dos configuraciones, una para cuando el dispositivo es energizado por bus y la otra cuando este es
alimentado externamente. Actua como cabecera para los descriptores de interfaz, es factible tambin tener
una configuracin usando un modo de transferencia distinta que la otra configuracin.
Una vez que todas las configuraciones son examinadas por el host, el host enva un comando
SetConfiguration con un valor distinto de cero el cual coincide con una de las configuraciones. Esto es usado
para seleccionar la configuracin deseada.

Cuando el descriptor de configuracin es ledo, este retorna la jerarqua de configuraciones entera, la cual
incluye todos los descriptores de interfaz y de endpoints relacionados a este descriptor de configuracin.

BNumInterfaces : Especifica el nmero de interfaces presentes paa esta configuracin.


bConfigurationValue Es usada para la peticin SetConfiguration para seleccionar esta configuracin.
IConfiguration : Es un ndice hacia un descriptor el, descibiendo asi, la configuracin en forma
legible para los humanos (human readable).
BmAttributes : Especifica parmetros de energa para la configuracin. Si un dispositivo es
energizado por s mismo, este valor de D6 es puesto a 1. El bid D7 fue usado en USB 1.0, para
indicar a un dispositivo energizado por bux, pero ahora esto es especificado por bMaxPower. Los
dispositivos tambien pueden soportar activacin (wake up) remota permitiendo que el dispositivo sea
activado cuando el host esta en modo de suspensin.
bmaxPower: define la maxima cantidad de potencia que el dispositivo consumir del bus. Esto es
expresado en unidades de 2mA, as una cantidad mxima de 500mA puede ser especificada. La
especificacin permite a un bus de alta capacidad de potencia alimentar un dispositivo que no
consuma mas de 500mA. Si un dispositivo alimentado por externamente perdiera su alimentacion,
este no podr consumir mas energa que la indicada por bMaxPower. Podran producirse fallas en la
operacin que no puedan realizarse sin alimentacin externa.
Descriptores de Interfaz
Un descriptor de interfaz puede ser visto como una cabecera de los descriptores endpoints que se agrupan en
un conjunto funcional ejecutando una funcin caracterstica de un dispositivo. El descriptor de interfaz esta
conformado por el siguiente formato:

Descriptores Endpoints
Los descriptores de endpoints son usados para describir los endpoints diferentes del endpoint 0. Endpoint 0
es siempre asumido a ser el endpoint de control y es configurado antes que la peticin de cualquier otro
descriptor. El host usar la informacin devuelta por estos descriptores para determinar los requerimientos de
ancho de banda del bus.

You might also like