Determinar y establecer la configuración de hardware
Conceptos Claves
- Activar y desactivar periféricos integrados.
- Configurar sistemas con o sin periféricos externos, tales como los teclados.
- Diferenciar entre los diferentes tipos de dispositivos de almacenamiento masivo.
- Establecer el ID de hardware adecuado para los diferentes dispositivos, en especial el dispositivo de arranque.
- Conocer las diferencias entre los dispositivos de conexión en hotplug y coldplug.
- Determinar los recursos de hardware de los dispositivos.
- Herramientas y utilidades para mostrar información de hardware (por ejemplo, lsusb, lspci, etc)
- Herramientas y utilidades para manipular los dispositivos USB
- Comprensión conceptual de sysfs, udev, hald, dbus
Términos y utilidades
- /sys
- /proc
- /dev
- modprobe
- lsmod
- lspci
- lsusb
Introducción
Una computadora moderna consta, como mínimo, de las siguientes partes:
Motherboard (Placa Madre): Es la placa principal que contiene los demás componentes fundamentales del sistema.
CPU: La unidad de central de procesamiento, también llamado procesador, es el componente principal de la computadora, interpreta las instrucciones contenidas en los programas y procesa los datos. Se ocupa de las operaciones básicas aritméticas, lógicas y de entrada y salida de datos.
Memoria RAM: Es la memoria de acceso aleatorio. La memoria RAM esta compuesta por dispositivos de almacenamiento en los cuales los datos almacenados pueden ser accedidos en cualquier orden.
Placa de red: También conocida como NIC, por sus siglas Network Interface Card. Es el dispositivo que permite conectar a la computadora con otra computadora, y de esta manera trabajar en red. Una sola computadora puede tener varias placas de red.
Puertos Seriales: Son interfaces físicas para conectar periféricos o terminales, transmiten los datos un bit a la vez
Puertos Paralelos: Al igual que los puertos seriales, sirven para conectar periféricos, se diferencian en que los datos aceptan conexiones de a varios bits en simultaneo.
Firmware
En el corazón de todo este hardware, se encuentra el firmware, que provee herramientas de configuración e inicia el proceso de arranque de la computadora. Entre las cosas que gestiona el firmware y una vez arrancado el sistema, Linux, se encuentran las interrupciones, las direcciones de I/O (Entrada/Salida), las direcciones DMA, el reloj de tiempo real e interfaces de disco ATA (Advanced Technology Attachment).
El sistema de archivos /proc
El sistema de archivos /proc es lo que se llama un sistema de archivos virtual, debido a que no contiene realmente archivos de algún medio de almacenamiento, sino que es creado en memoria RAM cuando se inicia el sistema. Sus archivos representan información que el kernel maneja. Estos archivos proveen información acerca del hardware, procesos en ejecución, etc. Muchas utilidades de Linux utilizan archivos en /proc para funcionar. Con el paso del tiempo, el filesystem /proc ha dejado de ser el lugar recomendado para incluir información acerca del hardware. Lo recomendable es usar sysfs (/sys).
Ejemplo
$ cat /proc/sys/fs/file-max
45372
El comando anterior nos muestra la cantidad de archivos que Linux pueda tener abiertos simultáneamente.
/etc/sysctl.conf
cat /proc/mounts
IRQs
Un IRQ es un pedido de interrupción(interruption request). Es una señal que se envía a la CPU solicitándole que suspenda la actividad que esta realizando y atienda un evento externo, como cuando se presiona una tecla del teclado. En x86, las interrupciones están numeradas del 0 al 15. Computadoras mas modernas, como sistemas x86-64, proveen más de 16 interrupciones.
Listado de interrupciones
0 - Reservado para uso interno
1 - Teclado
2 - Interrupciones en cascada para IRQs 8-15
3 - Segundo puerto RS-232 (COM 2 en Windows)
4 - Primer puerto RS-232 (COM 1 en Windows)
5 - Placa de Sonido o segundo puerto paralelo
6 - Controladora de discos floppy
7 - Primer puerto paralelo
8 - Reloj de tiempo real
9-11 - Abierto
12 - PS/2 Mouse
13 - procesador matemático
14 - Controlador ATA primario
15 - Controlador ATA secundario
Algunas interrupciones están reservadas para propósitos particulares, como el teclado y el reloj de tiempo real, otros tienen usos comunes, pero pueden ser reasignados, y otros quedan libres para ser asignados. La lista de interrupciones de puede leer desde /proc/interrupts.
Direcciones I/O (Direcciones de entrada y salida)
Las direcciones o puertos I/O son direcciones de memoria reservadas para la comunicación entre la CPU y dispositivos de hardware. Una vez que el sistema se encuentra corriendo, las direcciones de I/O, se pueden consultar desde el archivo /proc/ioports.
Direcciones DMA (Direct Memory Addressing)
DMA es un método de comunicación alternativo a los puertos I/O. En vez de tener a la CPU como intermediaria entre un dispositivo y la memoria, los DMA permiten a los dispositivos mandar datos directamente a la memoria, sin uso de la CPU. Esto permite tener menos requerimientos de uso de CPU para actividades de I/O. Para el uso de DMA, la arquitectura x86 implementa varios canales DMA, los cuales pueden usar usados por dispositivos. La información sobre los canales DMA se pueden encontrar en /proc/dma.
Dispositivos coldplug y hotplug
Los dispositivos hotplug son aquellos que pueden ser conectados mientras el sistema esta corriendo, mientras que los dispositivos coldplug precisan que el sistema se encuentre apagado para ser conectados y desconectados, corriendo el riesgo de dañarse si así no se hiciese. Generalmente los componentes internos de la computadora como la CPU, la memoria y los discos internos son coldplug. Y los dispositivos externos como dispositivos USB, firewire y Ethernet son hotplug.
Utilidades para detectar dispositivos hotplug
Demonio HAL: Las siglas HAL provienen Hardware abstraction layer, el demonio que opera esta capa de abstracción de hardware es llamado hald. Es un programa dentro del espacio del usuario y provee información sobre el hardware disponible. Se conecta a D-Bus y provee una API la cual las aplicaciones pueden utilizar para descubrir, monitorear e invocar operaciones en dispositivos.
D-Bus: Su nombre proviene de Desktop Bus. Es un demonio que permite a los programas en ejecución comunicarse entre sí y ser notificados de eventos. Ya sean eventos de otros procesos o de hardware, como por ejemplo la conexión de un disco USB. Es el vinculo que conecta a las aplicaciones con demonio HAL (hald).
udev: Tradicionalmente, Linux crea a los nodos de dispositivos como archivos en /dev . /dev se crea como un sistema virtual de archivos, que crea archivos de dispositivos dinámicamente a medida que los drivers de esto son cargados y descargados. Udev se puede configurar desde /etc/udev/udev.conf. Se puede crear reglas de Udev dentro del directorio /etc/udev/udev.d/. Las reglas son básicamente archivos dentro de este directorio, los cuales serán leídos por el demonio udev y utilizados cuando el Kernel notifica a udev sobre algún evento.
Sysfs (/sys) : El sistema virtual de archivos /sys exporta información de dispositivos. En este sistema de archivos virtual se guarda una base de datos con todos los dispositivos que están conectados al sistema. Los archivos dentro de /sys generalmente están compuestos por un solo valor.
Imagen 1
Configuración de placas PCI
El bus PCI, que es el bus de expansión mas estándar para dispositivos internos, fue diseñado con Plug and Play (PNP), por lo que generalmente estos dispositivos se configuran automáticamente. Igualmente existen comandos para el caso de que se requiera hacer alguna configuración manual, aunque esto no se da con frecuencia.
Comando lspci
Descripción
es una utilidad para la visualización de información sobre los buses PCI en el sistema y los dispositivos conectados a ellos.
Sintaxis
lspci [opciones]
Opciones mas comunes
-t | Muestra un diagrama de árbol que contiene todos los buses, los puentes, los dispositivos y las conexiones entre ellos. |
---|---|
-vv | Muestra mas más detalles. |
-nn | Muestra el proveedor PCI y los códigos del dispositivo como números y nombres. |
Comando setpci
Descripción
Es la herramienta para configurar dispositivos pci.
setpci [opciones] dispositivos operaciones
Configuración de Dispositivos USB
USB es la forma mas popular para interfaces externas. USB permite conectar una variedad de dispositivos . Hay 3 versiones de USB, 1.1 , 2.0 y 3.0. Es el método preferido para conectar impresoras, discos externos, cámaras de fotos y muchos otros tipos de dispositivos.
Los dispositivos USB se adjuntan a una computadora a través de hubs . Se organizan en forma de árbol. El comando lsusb se puede utilizar para ver cómo los dispositivos están conectados físicamente a un sistema Linux.
$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/6p, 480M
Módulos del Kernel
El hardware en Linux se maneja a través de drivers del kernel, muchos de los cuales vienen en forma de módulos de Kernel. Estos generalmente son archivos independientes, típicamente almacenados dentro de /lib/modules. Pueden ser cargados para proveer acceso a hardware y descargados para quitar el acceso. Usualmente, Linux carga los módulos cuando se inicia, pero módulos adicionales pueden ser cargados manualmente.
Se puede listar los módulos que se encuentran cargados actualmente usando lsmod, el cual no recibe opciones. Este comando nos muestra los módulos que cargados además de que otros programas o módulos se encuentran utilizándolos.
/etc/modules
/etc/modprobe.d/
Comando lsmod
Descripción
El comando lsmod muestra toda la información disponible acerca de los módulos cargados actualmente. Revisar de los módulos cargados es a menudo el primer paso en la identificación de posibles problemas, como los conflictos de controladores (sucede con bastante frecuencia con los controladores de dispositivos USB). Esta información también se puede encontrar en /proc/modules.
Sintaxis
lsmod [opciones]
Opciones
lsmod sólo tiene dos opciones, ninguna de ellas afecte a su funcionamiento.
Opción | Abreviación | Descripción |
---|---|---|
--help | -h | Muestra información de ayuda. |
--version | -V | Muestra la versión. |
Cargar módulos de kernel en tiempo de ejecución
Linux permite cargar módulos mediante 2 programas: insmod y modprobe.
Insmod carga un solo modulo a la vez, mientras que modprobe automáticamente carga los módulos dependientes. Por lo que generalmente es la herramienta preferida.
Comando modprobe
Sintaxis
modprobe [opciones] módulo [símbolo = valor ...]
Descripción
Como insmod, modprobe se utiliza para insertar módulos. De hecho, modprobe es un contenedor insmod y proporciona funcionalidad adicional. Además de la carga de módulos individuales, modprobe tiene la capacidad de cargar módulos junto con sus requisitos previos o todos los módulos almacenados en un directorio específico. El comando modprobe también puede eliminar los módulos cuando se combina con la opción -r.
De debe iniciar sesión como superusuario para insertar módulos.
Opciones de uso más frecuente
Opción | Descripción |
---|---|
-a | Carga todos los módulos. Cuando se utiliza junto con la opción -t tipo_modulo , se limita a los módulos en el directorio tipo_modulo. |
-c | Muestra la configuración del módulo completo, incluyendo valores por defecto y las directivas que se encuentran en /etc/modules.conf (o /etc/conf.modules en los sistemas más antiguos). La opción-c no se utiliza con cualquier otra opción. |
-l | Lista los módulos. Cuando se utiliza con la opción -t tipo_modulo, lista solamente los módulos en el directorio tipo_modulo. Por ejemplo, si tipo_modulo es net, a continuación se muestran los módulos en /lib/modules/kernel-version/kernel/net. |
-r | Remueve el módulo, similar a rmmod. Varios módulos pueden ser especificados. |
-s | Salida directa a syslog en lugar de stdout. |
-t tipo_modulo | Intenta de cargar varios módulos que se encuentran en el directorio tipo_modulo. Esta acción hardware prueba insertar módulos para un mismo tipo de hardware, como un adaptador de red (en cuyo caso tipo_modulo sería net, lo que representa /lib/modules/kernel-version/kernel/net). |
Ejemplo 1
Instalar el módulo de sistema de archivos msdos:
modprobe msdos
Ejemplo 2
Remover los módulos fat y msdos del, asumiendo msdos no está en uso:
modprobe -r fat msdos
Ejemplo 3
Intenta cargar los módulos de red disponibles hasta que logra cargar alguno:
modprobe -t net
Ejemplo 4
Intento de cargar todos los módulos de red disponibles:
Modprobe –at net
Ejemplo 5
Lista de todos los módulos disponibles para su uso:
Modprobe -l
Ejemplo 6
Lista de todos los módulos en el directorio de red para las interfaces de red de 3Com:
Modprobe-lt net | grep 3c
Remover módulos
Para remover un modulo se utiliza el comando rmmod, que básicamente es el opuesto del comando insmod