Propiedades del Hardware en Linux
En este apartado nos dedicaremos a entender el funcionamiento y las propiedades del hardware en Linux con respecto a los servicios y directorios que lo manejan.
Table of Contents
ToggleDetección y configuración del hardware
Los siguientes directorios y sistemas establecen las distintas funcionalidades en el hardware y kernel de Liunx.
Directorio /proc
El kernel de Linux tiene dos funciones principales:
Controlar el acceso a los dispositivos físicos del ordenador
Establecer cuándo y cómo los procesos interactúan con dichos dispositivos.
El directorio /proc/* contiene una jerarquía de archivos especiales que representan el estado actual del kernel, permitiendo a las aplicaciones y usuarios mirar detenidamente en la vista del propio núcleo del sistema. Dentro de este directorio, se puede encontrar una gran cantidad de información que detalla el hardware del sistema y cualquier proceso en ejecución.
Algunos de los archivos dentro del árbol de directorios pueden ser manipulados por los usuarios y las aplicaciones que comunican los cambios de configuración al kernel.
Los archivos relevantes de esta carpeta son los siguientes:
- /proc/dma Archivo que contiene el histórico DMA del equipo.
- /proc/interrupts Archivo que contiene el histórico IRQ del equipo.
- /proc/ioports Archivo que contiene el histórico Entrada/Salida del equipo.
- /proc/pci La asignación de recursos puede ser consultada con comandos como lspci o dmesg.
Directorio /dev
Este directorio posee dispositivos cuya función es procesar la información caracter por caracter.
- /dev/tty Terminales.
- /dev/console Terminal.
- /dev/input Dispositivos de entrada (mouse).
- /dev/raw Permite acceso directo a dispositivos de IO.
- /dev/pts Pseudoterminal.
- /dev/lp Impresora.
Directorio /sys
Linux comenzó a ser utilizado por un nuevo sistema de archivos llamado sysfs, a partir de la versión 2.6 del kernel. Este sistema de archivos es virtual y se monta sobre el directorio /sys . Es un directorio con información específica de hardware.
El núcleo exporta hacia el espacio de usuario información sobre los dispositivos y controladores. Esta información se organiza dentro de /sys , agrupada en directorios de forma jerárquica:
- /sys/block Un directorio para cada dispositivo de tipo bloque.
- /sys/bus Contiene un directorio por cada tipo de bus físico del sistema.
- /sys/class Directorios de los dispositivos organizados en clases por el kernel. Una clase de dispositivo describe un tipo de dispositivo funcional.
- /sys/devices Muestra los dispositivos físicos que han sido encontrados por los diferentes tipos de bus registrados en el kernel.
- /sys/firmware Contiene interfaces para manipular objetos y atributos especificos del firmware.
- /sys/modules Un directorio por cada módulo cargado por el kernel.
- /sys/fs Un directorio por cada sistema de archivos.
- /sys/power Contiene información del sistema de alimentación eléctrica.
El servicio haldaemon extrae datos de /sys para ser utilizado por aplicaciones de escritorio. Tener en cuenta que este servicio ha sido reemplazado por udisks y upower.
El servicio udev sirve para mejorar el uso del directorio /dev (el cual contiene los archivos que son nodos de dispositivos en general) y para manejar el comportamiento del sistema frente a eventos relacionados con dispositivos de bloque, red, usb, etc. También se basa en la información que extrae del directorio /sys para trabajar. El comportamiento mencionado por parte de udev se basa en archivos de reglas que están en el directorio /usr/lib/udev/rules.d
Sistema D-bus
D-BUS es un sistema de comunicación entre aplicaciones mediante mensajes. Para ello, utiliza un demonio ejecutable que funciona como bus del sistema al que se conectan las aplicaciones.
Dispone de dos funcionalidades:
Comunicación entre las aplicaciones de una misma sesión de usuario.
Comunicación entre el sistema operativo y la sesión de escritorio.
El servicio udev es el encargado de detectar y realizar determinadas acciones con dispositivos, los cuales se ven reflejados en /sys . El servicio D-bus al tener capacidad para enviar mensajes entre aplicaciones puede, entre otras cosas, realizar una acción determinada en un entorno de escritorio relacionada con un dispositivo detectado.
Módulos del hardware
Una de las principales propiedades del Hardware en Linux son los módulos. Es decir, hoy en día los kernels están modularizados, esto quiere decir que los mismos están compilados en el núcleo y solo son cargados cuando se los necesita. Estos módulos son cargados o borrados por el usuario root (administrador), dependiendo de la situación que esté expuesta. Por lo general, hay ciertos parámetros en el archivo del gestor de arranque y de la línea de comandos del kernel que afectan a este, dado que estos no controlan los módulos del núcleo.
Una vez conectado físicamente el dispositivo, el kernel intentará cargar el módulo (comúnmente lo conocemos como driver) necesario para que el dispositivo pueda funcionar. Cabe mencionar que los módulos compilados se encuentran en /lib/modules/ (versión_del_kernel). Para configurar sus parámetros, utilizaremos el archivo /etc/modules.conf o /etc/modules
Comandos para la administración de módulos
Para comprobar que se ha instalado correctamente o para instalar el módulo si disponemos de un driver precompilado, podemos utilizar las siguientes herramientas de gestión:
Comando modinfo
El comando modinfo muestra información acerca de los módulos. Veamos un ejemplo:
Mostrar información del módulo 9pnet
# modinfo 9pnet
Comando lsmod
El comando lsmod muestra información referida a los módulos cargados en /proc/modules.
Sintaxis:
# lsmod módulo
Comando modprobe
El comando modprobe permite cargar un módulo con el nombre, sin necesidad de especificar el PATH completo, ni los módulos dependientes, dado que utiliza el contenido del modules.dep para resolver las dependencias..
# modprobe –show-depends fat
# modprobe –show-depends nfs
En el caso de querer descargar el módulo de la memoria, podemos hacer uso del comando rmmod.
¿Cómo obtener información específica del hardware?
En muchas arquitecturas de computadoras la herramienta de detección y configuración de hardware es el propio firmware que viene embebido en la placa madre. Tanto con BIOS como con Hardware es posible habilitar y deshabilitar los periféricos y unidades de almacenamiento.
A continuación, veremos algunos comandos para ver cierta información sobre las propiedades del hardware en Linux:
Comando lspci
Este comando nos brinda información detallada sobre los buses y dispositivos PCI conectados al equipo. Así mismo, nos brinda información detallada sobre los IRQ y direcciones de Entrada/Salida asociados a los dispositivos PCI encontrados. Para ello, solo se tiene que agregar el parámetro -v al comando.
Comando lshw
Es una gran herramienta de texto para extraer información sobre el hardware presente.
Opciones:
clase Muestra una clase determinada (memory, network, disk, cpu).
html Exporta en formato html.
short Modo resumido.
Dispositivos USB (Universal Serial Bus)
Los dispositivos USB son quellos mediante los cuales podremos conectar diversos tipos de periféricos , como pen drive, teclados, discos rígidos camaras, impresoras, etc. Cuando se configura el kernel, se ve una sección llamada “USB support” que contiene opciones USB. Los dispositivos USB son agregados al equipo en forma de árbol, identificados unívocamente por el sistema.
Existen tres tipos de controladores USB:
OHCI
UHCI
EHCI
El soporte para dispositivos USB está disponible desde la versión 2.2.7 del kernel de Linux, y, con ello, la liberación de 3 módulos o controladores para la misma. Lss controladores OHCI y UHCI son USB 1.1, siendo capaces de transmitir como máximo 12Mbps. En cambio, EHCI es USB 2.0 y puede transmitir, teóricamente, 480Mbps. Un dispositivo Usb 2.0 enchufado en uno Usb 1.1 solo será capaz de transmitir a un máximo de 12Mbps.
Existen, actualmente, una cantidad enorme de dispositivos USB:
Dispositivos de interface Humana (HID) -> Todo dispositivo de Entrada (mouse, teclado,etc).
Dispositivos de Comunicación -> Estos pueden ser Modems o Wifi.
Dispositivo de almacenamiento masivo ->Dispositivos de disco, Lectores de tarjetas, etc.
Audio ->Placas de sonido.
IrDA -> Dispositivos Infrarrojos.
Impresoras -> Impresoras y cables Usb a puerto paralelo.
Para ver los dispositivos conectados usamos el siguiente comando:
# lsusb
En el caso de querer verlos en forma jerarquizada, usamos:
# lsusb –t