Guía de USB en Gentoo Linux
1.
Introducción
¿Qué es USB?
USB significa Bus Serial Universal (Universal Serial Bus en inglés) y
básicamente es una interfaz externa estándar que permite la
comunicación entre el computador y varios tipos de
periféricos. Algunos de los dispositivos USB más comúnmente usados hoy
en día son los teclados, ratones, llaveros (también llamados pen
drives), cámaras digitales, grabadores externos de CD y DVD,
impresoras, etc.
Actualmente hay dos versiones en uso de USB, a saber, USB 1.1 y USB
2.0. Debido a que USB siempre ha sido compatible hacia atrás con sus
versiones anteriores, USB 2.0 es compatible con USB 1.1. Los últimos
dispositivos USB típicamente son compatibles con USB
2.0. Adicionalmente USB 2.0 permite una velocidad máxima de
transferencia de datos de 480 Mbps o 60 MBps y esta es la principal
diferencia entre los dos estándares. Otra ventaja de USB es que los
dispositivos son todos enchufables en caliente, lo que
significa que no tiene que reiniciar su sistema para poder usar esos
dispositivos.
Una perspectiva técnica
Antes de ir a las opciones exactas de configuración en el núcleo, es
bueno revisar USB un poco más en detalle. Si está apurado o desea
saltarse esta sección, por favor vaya a Configuración del Núcleo.
Un sistema USB tiene una controladora, concentradores y un
concentrador raíz, entre otros, y permite tener hasta 127
dispositivos USB incluyendo los concentradores. La controladora no es
otra cosa que la interfaz de hardware entre el dispositivo USB y el
Sistema Operativo. Hoy en día hay un par de interfaces HCI (Interfaz
de Controladora de Host) en uso y son la interfaz OHCI (Open HCI)
proveniente de Compaq, UHCI (HCI Universal) y EHCI (HCI Mejorado),
ambas de Intel. Tanto OHCI como UCHI son los estándares de interfaces
en la industria para USB 1.1 mientras que EHCI lo es para USB 2.0.
El fabricante de hardware provee de una interfaz al programador que
permite al sistema interactuar con el hardware al que se le conoce
como HCD (Dispositivo Controlador del Host). A través del HCD el
dispositivo interactúa con el software. El siguiente diagrama debería
aclarar los conceptos y ayudar a una mejor comprensión:
Listado de Código 1.1: Arquitectura General de USB |
+ ----- Hardware ---- + ---- Software ---- +
| | |
|[Disp. USB] -+-> {EHCI}--+---> ( EHCD ) |
| | | | Usuario
| `-> {UHCI}--+---> ( UHCD ) |
| | |
+ ----- Hardware ---- + ---- Software ---- +
|
Un dispositivo USB puede usar un manejador propio o bien uno ya
presente en el sistema y esto está basado en el concepto de
clase de un dispositivo. Esto significa que si un dispositivo
pertenece a cierta clase, entonces otros dispositivos que
también pertenezcan a la misma clase pueden hacer uso del mismo
manejador. Alguna de esas son la clase USB HID (Dispositivos de
Interfaz Humana) que abarca dispositivos de entrada como teclados y
ratones, la clase de dispositivos USB de almacenamiento masivo
comprende a dispositivos como los llaveros, cámaras digitales,
reproductores de audio y la clase CDC de USB (Clase de Dispositivos de
Comunicación) que esencialmente cubre los módems USB y dispositivos
similares.
¿Qué hay en su máquina?
Es muy simple averiguar si su máquina tiene o no soporte USB
2.0. Usaremos la orden lscpci para este propósito.
Nota:
La herramienta lspci es parte del paquete
sys-apps/pciutils. Si no lo tiene instalado, hágalo mediante
emerge pciutils. Note que debe ser superusuario mientras
ejecute la orden lspci.
|
Listado de Código 1.2: Algunas salidas de lspci |
# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01) (prog-if 00 [UHCI])
00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01) (prog-if 00 [UHCI])
00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI])
00:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI])
|
Así que al usar la orden lspci, puede averiguar si sistema
permite el uso de USB 2.0. Esto será de utilidad al activar las
opciones correspondientes en el núcleo.
2.
Configuración del Núcleo
Obteniendo el núcleo
Primero instale con emerge las fuentes del núcleo de su
preferencia. Aquí usaremos gentoo-sources. Para mayor
información acerca de las distintas fuentes del núcleo disponibles en
Portage, por favor revise la Guía del Núcleo de Gentoo.
Listado de Código 2.1: Obtener las fuentes del núcleo |
# emerge gentoo-sources
|
Ahora, procedemos con la tarea de configurar el núcleo.
Listado de Código 2.2: Dirigiéndose a la fuentes |
# cd /usr/src/linux
# make menuconfig
|
Nota:
El ejemplo anterior asume que el enlace simbólico
/usr/src/linux apunta a las fuentes del núcleo que desea
usar. Por favor, asegúrese de esto antes de continuar.
|
Opciones de configuración para el núcleo
Ahora se dará una mirada a algunas de las opciones que tendrá que
activar en el núcleo para asegurar el soporte de USB para sus
dispositivos.
Nota:
Los ejemplos en este documento mostrarán las opciones de configuración
para dar soporte básico de USB así como aquellas que comúnmente se
necesitan, por ejemplo, un dispositivo de almacenamiento USB (en su
mayoría cámaras y llaveros USB). Si tiene un dispositivo específico
USB que necesita ser configurado, lea el manual del fabricante o
busque en Internet para ver si dicho dispositivo tiene soporte
incluido en el núcleo o que haya algún controlador que puede
usar. Note que por motivos de simplicidad, todos los ejemplos tienen
las opciones configuradas en el núcleo y no como módulos. Si desea
tener un núcleo modular, asegúrese de anotar los nombres de los
módulos y ajuste apropiadamente sus archivos de configuración.
|
Listado de Código 2.3: Opciones de make menuconfig |
Device Drivers --->
SCSI device support --->
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
USB support --->
<*> Support for Host-side USB
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
Si tiene un teclado USB, ratón, joystick, o cualquier otro dispositivo,
necesitará activar el soporte para HID. Regrese un nivel a
"Device drivers" y active el soporte para HID como se muestra a
continuación:
Listado de Código 2.4: Activando el soporte HID |
Device Drivers --->
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
|
Ya que están configuradas sus opciones, puede (re)compilar el
núcleo y el soporte USB debería estar funcionando una vez que reinicie
con el nuevo núcleo. Ahora puede pasar a
Ver USB funcionando y asegurarse que todo
trabaje como es debido.
3.
Ver USB funcionando
¡dmesg es su amigo!
Ha llegado la hora de probar y usar los dispositivos USB. En este
capítulo veremos cómo responde el sistema a los variados dispositivos
USB. Empezaremos conectando un llavero USB de 512 MB. Puede usar algún
otro dispositivo de almacenamiento masivo similar. Usaremos
principalmente dmesg para ver qué está sucediendo y cómo
responde el sistema al dispositivo.
Nota:
dmesg, en general, presenta una buena cantidad de información
antes de desplegar la que necesitamos, pues lee el búfer del núcleo
que tiene todos los mensajes del arranque. La salida mostrada en los
siguientes ejemplos tiene sólo las opciones relevantes y se han
agregado espacios extras para mejorar la lectura. Si lo necesita, por
favor use dmesg | more o dmesg | less para ver mejor la
salida en su sistema.
|
Listado de Código 3.1: Salida de dmesg para el llavero |
# dmesg | less
usb 1-1: new full speed USB device using uhci_hcd and address 2
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: JetFlash Model: TS512MJF2A Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sdb: 1003600 512-byte hdwr sectors (514 MB)
sdb: Write Protect is off
sdb: Mode Sense: 0b 00 00 08
sdb: assuming drive cache: write through
SCSI device sdb: 1003600 512-byte hdwr sectors (514 MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sdb at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete
usb 1-1: USB disconnect, address 2
|
Una vez que el dispositivo está conectado y montado, puede acceder a
él como si fuera un disco duro normal. Las operaciones habituales como
cp, mv, rm, etc funcionan bien. También podría
crear un sistema de archivos en el llavero USB.
Listado de Código 3.2: Acceder al llavero |
# mount /dev/sdb1 /mnt/usb
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda8 9.4G 7.5G 1.9G 80% /
/dev/sda9 11G 8.1G 2.4G 78% /usr
none 189M 0 189M 0% /dev/shm
/dev/sdb1 490M 34M 457M 7% /mnt/usb
|
Nota:
Las cámaras digitales pueden accederse de la misma forma que los
llaveros. El autor de este documento posee una Nikon Coolpix 5200 y
obtiene acceso de esta forma. Las cámaras de hoy en día normalmente
tienen dos modos para transferir las fotos: Almacenamiento masivo USB
y PTP (Protocolo de Transferencia de Imágenes). La cámara está
configurada para que se comporte como un dispositivo de almacenamiento
masivo y el procedimiento usado es exactamente el mismo para acceder a
un llavero USB, motivo por el cual no se explica con detalle. Por
favor, note que esto puede que NO funcione en todos los casos y con
todas las cámaras digitales que tengan soporte USB.
|
¿Cómo aparecería un ratón USB en caso de que tenga uno? Lo hará como
un dispositivo HID.
Listado de Código 3.3: Ratón óptico USB |
# dmesg | grep USB
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
usb 1-1: new low speed USB device using address 2
input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1
|
Otra orden elegante que puede usar para ver el estado de sus puertos
USB es lsusb. Es parte de sys-apps/usbutils y será
cubierto en el siguiente capítulo.
4.
USB en el espacio del usuario
Herramientas útiles
Hasta ahora hemos visto cuánto soporte de USB existe en el
núcleo/sistema en Linux. Ahora prestaremos atención en qué tipo de
soporte provee Gentoo para USB en el espacio del usuario.
Una de las herramientas más útiles que hay es lsusb. Esta
muestra todos los dispositivos conectados al sistema. Instalarlo es
muy simple.
Listado de Código 4.1: Instalar usbutils |
# emerge usbutils
|
Una vez instalado, puede ejecutar lsusb para obtener información
simple de los dispositivos USB que están conectados a la máquina.
Nota:
Debe ser superusuario en la mayoría de los casos para ejecutar
lsusb.
|
Aviso:
lsusb lee la información de los dispositivos USB a partir de
/proc/bus/usb. Si no está activado aquello en su núcleo,
es posible que lsusb no funcione. Por favor, asegúrese que el
soporte del sistema de archivos /proc esté activado en su
núcleo y que usbfs esté montado en /proc/bus/usb
(lo que debería pasar automáticamente).
|
Listado de Código 4.2: lsusb en acción |
# lsusb
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
|
Si es de aquellos que disfruta de ver mucha información, tiene la
opción de ejecutar lsusb -v. Inténtelo y vea la cantidad de
información que se despliega. Otra buena opción es que lsusb
muestra la jerarquía física actual de USB como un árbol y por tanto
hace más fácil de entender el mapa exacto del dispositivo. La orden
es lsusb -t. Por ejemplo,
Listado de Código 4.3: lsusb mostrando la jerarquía USB |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
Fácilmente puede correlacionar las salidas de lsusb y lsusb
-t, que ayuda a la hora de depurar así como entender el
funcionamiento de USB.
5.
Agradecimientos ...
Referencias
Me fueron de especial ayuda un buen número de documentos en línea para
escribir esto, y algunos de ellos son bastante técnicos pero
ciertamente interesantes. Pienso que todos merecen algo de
crédito. ¡Así que aquí vamos!
Otros enlaces interesantes
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|