LPIC 101.1: Determinar y configurar el hardware

Tue 20 November 2012

Nota: como he explicado en el post anterior, voy a empezar a traducir al castellano el contenido de acacha.org, en concreto el material de preparación de la certificación LPIC-1. Todo el contenido que redacte ahora y en posteriores post relacionados con LPIC son obra de Sergi Tur. Sin embargo, como soy pésimo maquetando, y dado que el contenido que se puede estructurar en una wiki no se presenta igual que en un documento único, añadir y eliminar cosas es inevitable. Espero acabar la loca faena que me he decidido empezar. Dicho esto, al ajo:

Topic 101.1: Determinar y configurar el hardware

Peso: 2

Descripción: Los candidatos deben ser capaces de determinar y configurar el hardware fundamental del sistema.

Areas de conocimiento claves:

  • Activar y desactivar periféricos
  • Configurar sistemas con o sin periféricos externos, como teclados
  • Diferenciar entre los distintos tipos de dispositivos de almacenamiento masivo
  • Configurar correctamente el hardware ID para diferentes dispositivos, especialmente el de arranque
  • Saber la diferencia entre dispositivos coldplug y hotplug
  • Determinar recursos hardware para dispositivos
  • Herramientas y utilidades para listar información del hardware (lsusb, lspci, etc)
  • Herramientas y utilidades para manipular dispositivos USB
  • Conocimiento básico de sysfs, udev, hald, dbus

Lo siguiente es una lista parcial de los ficheros, términos y utilidades.

  • /sys
  • /proc
  • /dev
  • modprobe
  • lsmod
  • lspci
  • lsusb

Un sistema operativo es el software que hace de enlace entre las aplicaciones de usuario y el hardware. La finalidad de un sistema operativo es ofrecer un conjunto de programas que permetin hacer más fácil y eficiente el uso de un ordenador. Actualmente un ordenador es una máquina compleja que consta de uno o más procesadores, memoria de diferentes tipologías, relojes, periféricos, etc y además son sistemas donde puede trabajar más de uno usuario. Es evidente que se hace necesario que haya alguna solución que permita hacer uso de un ordenador sin necesidad de dominar la complejidad del hardware.

Arquitectura de un sistema operativo

Partes de un sistema operativo:

-Núcleo: es la interfaz de comunicación entre el hardware y el software. - Aplicaciones base: aplicaciones básicas para el correcto funcionamiento del sistema. La mayoria de aplicaciones son GNU

Dos espacios de trabajo:

- Modo supervisor o modo kernel: No tiene restricciones de acceso a la memoria y puede acceder a cualquier dirección, de cualquier proceso, o de cualquier dispositivo. Reservado para el uso del núcleo, de su módulos o de algunos de sus controladores. Programar en este espacio es muy complicado. Se ha de tener mucho cuidado de no interferir entre los diferentes espacios de memoria de procesos. Se ha de diseñar el programa con la idea de no fallar nunca, puesto que un error en el programa implica un error en todo el sistema. - Modo de usuario o espacio de usuario: En contraste, el espacio de usuario es la zona donde se ejecutan las aplicaciones de usuario. En la mayoría de sistemas operativos actuales cada proceso tiene su propio espacio de memoria y no puede acceder al espacio de memoria de otros procesos y de esta manera se evita la interferencia entre procesos. La única forma en que un proceso del espacio de usuario puede acceder a la memoria de otros procesos es a través de las llamadas de sistema (interfaces) del sistema operativo, de forma que el sistema operativo puede gestionar el control de acceso a los recursos.

Dispositivos

Tipos de dispositivos:

  • Hotplug: son los que pueden estar conectados o no al ordenador (dispositivos USB, ethernet, firewire, etc) Se pueden conectar o desconectar cuando el ordenador está encendido.
  • Coldplug: son normalmente los dispositivos internos. Están diseñados para que puedan ser conectados solamente cuando el ordenador está apagado. Intentar conectarlos en caliente puede ocasionar problemas. Nota: los dispositivos antiguos que utilizaban el puerto serie o paralelo son hotplug pero no se consideran hotplug porque pueden ocasionar problemas si se intenta conectar en caliente.

Gestor de dispositivos hotplug:

  • Sysfs: sistema de ficheros virtual que se monta en la carpeta /sys. Aquí se exporta información sobre dispositivos de forma que estos pueden ser utilizados por las aplicación de espacio de usuario (user space) para acceder a los dispositivos. - HAL Daemon: El demonio Hardware Abstraction Layer (HAL), o hald es un programa de espacio de usuario que se ejecuta de forma continuada y en segundo plano y que proporciona a otros programas información sobre los dispositivos hardware disponibles.
  • D-Bus (Desktop Bus): proporciona un nivel de abstracción adicional para acceder a la información del hardware. Como hald, dbus se ejecuta como un demonio (en segundo plano y de forma continuada). D-Bus es un sistema de comunicación entre procesos (IPC o Inter-Proccess Communication). Permite registrar los eventos de procesos pero también de hardware (por ejemplo la disponibilidad de un nuevo dispositivo USB)
  • udev: Linux trata los dispositivos hardware como ficheros que se pueden encontrar en la carpeta /dev. Entre otros, la aparición de dispositivos hotplug va a motivar la creación de udev, un sistema de ficheros virtual montado en /dev, que genera ficheros de dispositivo de forma dinámica donde los drivers se cargan o descargan. Se configura en la carpeta /etc/udev

Plug and Play (PnP)

Los primeros PC asignaban números de puerto y IRQs fijas para dispositivos específicos, como teclados o impresoras con puerto paralelo. Este hecho dificultaba añadir nuevos dispositivos o incluso ejecutar dos dispositivos del mismo tipo. Por ejemplo, los puertos serie se nombraban:

  • COM1: Primer puerto serie. Típicamente ttyS0 en Linux.
  • COM2: Segundo puerto serie. Típicamente ttyS1 en Linux.

Además muchas placas base se configuraban con jumpers. A medida que aparecen más tipos de dispositivos el sistema se hizo obsoleto y apareció PnP. La idea es que los propios dispositivos informen al sistema y a la BIOS cuáles son los recursos que necesitan y que el sistema informe al dispositivo que recursos se le han asignado. Este sistema va a ser introducido con IBM PS/2. Más adelante la idea fue utilizada en tarjetas ISA, sobretodo con modems y tarjetas de sonido (muy habituales en aquellos tiempos). Todos los dispositivos PCI son PnP. Sin embargo, con PnP en principio todo debía ser automático pero por incompatibilidades había dispositivos que se debían configurar a mano. La herramienta isapnptools se utilizaba por controlar la asignación de recursos en dispositivos ISA con el comando isapnp y el fichero de configuración /etc/isapnp.conf. Desde la aparición de los kernels 2.4 el apoyo para PnP está integrado en el kernel de Linux y estas herramientas se han convertido en obsoletas. Otro comando que han quedado obsoleto es lspnp y el fichero /proc/bus/pnp Actualmente todos los dispositivos PCI y posteriores (AGP, PCI-Express) son PnP

Módulos – Gestión del Hardware

Los controladores o drivers se encargan del acceso controlado al hardware. La mayoría de controladores son módulos del kernel. Estos pueden estar integrados en el mismo núcleo o cargarse en caliente. Se almacenan en /lib/modules y los que están disponibles para nuestro kernel están en \$ /lib/modules/`uname -r`. Las herramientas necesarias para la gestión de los módulos se encuentran en el paquete module-init-tools que por regla general se encuentra incluido en la mayoría de distribuciones. Las principales herramientas son: - lsmod: Muestra la información de /proc/modules. La columna used indica cuantos módulos dependen de ese módulo.

  • insmod: inserta un módulo en el kernel. Si el módulo depende de otros, las dependencias deben estár cargadas antes de ejecutar insmod.
  • modprobe: inserta un módulo en el kernel y carga automáticamente los módulos que dependen de éste. En la carpeta /etc/modprobe.d/ se puede configurar las opciones a la hora de cargar un módulo, o definir una lista negra para especificar que no se cargue un módulo concreto
  • modinfo: muestra la información detallada de un módulo. Interesante para ver en que ruta se encuentra el fichero, o para averiguar para que sirve.
  • rmmod: eliminar un módulo del kernel. Se puede incluir en el fichero /etc/modules que módulos queremos cargar manualmente durante el inicio del sistema. El script que se encarga de esta tarea es /etc/init.d/module-init-tools
  • depmod:  Establece las dependencias entre módulos. Se ejecuta unicamente durante el inicio de sistema. Solo lo ejecutaremos manualmente si modificamos la configuración de los módulos, como modificar el fichero modules.conf o de las carpetas modules.d. Genera el fichero /lib/modules/(kernel-version)/modules.dep

Dispositivos PCI

Antes de la aparición del sistema PnP (mediados de los 90), era tedioso configurar el hardware y a menudo se debía recurrir a los jumpers o a la BIOS. Actualmente la configuración se puede hacer por software y a menudo no hace falta configurar nada ya que gracias a PnP, los dispositivos se configuran solos. Se puede modificar los comportamiento del núcleo con respecto a la detección de hardware cambiando los siguientes parámetros u opciones del núcleo: PCI Devices –> Bus Options –> PCI Access Mode Tenemos 4 opciones: - BIOS - MMConfig - Direct - Any-> Que quiere decir primero MMconfig, después Direct y finalmente BIOS. Es la opción habitual. lspci: muestra información sobre los dispositivos PCI y otros dispositivos del sistema.

$ lspci
00:00.0 Host bridge: nVidia Corporation nForce3 250Gb Host Bridge (rev
a1)
00:01.0 ISA bridge: nVidia Corporation nForce3 250Gb LPC Bridge (rev
a2)
00:01.1 SMBus: nVidia Corporation nForce 250Gb PCI System Management
(rev a1)
00:02.0 USB Controller: nVidia Corporation CK8S USB Controller (rev
a1)
[........]

si escribimos:

$ lspci -nn
00:00.0 Host bridge [**0600**]: Intel Corporation 82Q35 Express DRAM
Controller**[8086:29b0]** (rev 02)
00:02.0 VGA compatible controller [0300]: Intel Corporation 82Q35
Express Integrated Graphics Controller [8086:29b2] (rev 02)
00:03.0 Communication controller [0780]: Intel Corporation 82Q35
Express MEI Controller [8086:29b4] (rev 02)

[………] Vemos que cada dispositivo tiene un id único. El formato es: [código] -> [dispositivo:fabricante]. Esta información la extrae del fichero /usr/share/misc/pci.ids y se puede actualizar con el comando update-pciids

Dispositivos USB

En Linux hay diferentes drivers o controladores USB con nombres como UHCI, OHCI, EHCI o R8A66597. La mayoría de sistemas operativos Linux modernos vienen con los drivers USB ya cargados y la gestión de dispositivos USB es automática. Algunos controladores son solo para la versión 1.1 de USB, pero la mayoría también soportan 2.0. Hay que tener en cuenta que una cosa es el bus de comunicación USB y otro el dispositivo que hay conecta, de tal manera que pueden ser necesarios otros drivers o aplicaciones para los usos concretos de cada dispositivo (impresoras, escanners, cámaras digitales…). Si con dispositivo PCI tenemos el comando lspci con USB disponemos del comando lsusb que nos muestra los dispositivos USB que tenemos conectados:

$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 002: ID 03f0:0324 Hewlett-Packard
Bus 007 Device 003: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
[........]

Antes se gestionaban con las utilidades usbmgr, hotplug, udev…. Desde los kernels 2.6 no es necesario, puesto que integra hotplug y utiliza udev

Sistemas de ficheros especiales

/sys

Sysfs es un sistema de ficheros virtual (solamente existe en RAM) proporcionado por el núcleo del sistema desde la versión 2.6 (año 2003). Sysfs exporta información sobre los dispositivos y sus controladores (drivers) desde el espacio de sistema del núcleo al espacio de usuario. Sysfs apareció durante el desarrollo del núcleo 2.5 (las ramas impares siempre son las de pruebas) con la intención de solucionar los siguientes problemas:

  • Falta de un método unificado para representar las relacionas entre los controladores y los dispositivos de hardware.
  • Faltaba un mecanismo de soporte hotplug estandar
  • procfs estaba pleno de información que no estaba relacionada con los procesos.

Muchas aplicaciones dependen de sysfs para funcionar (p. ej. udev o HAL). Utilizan este sistema de ficheros virtual para acceder a información del hardware y de los controladores del hardware (normalmente módulos del núcleo). En la estructura de la carpeta /sys los directorios organizan los dispositivos, las clases, los buses, los controladores etc. y también establecen las relaciones entre ellos. Los ficheros contienden atributos (cada fichero un atributo).

Carpetas principales:

/sys/devices: Contiene la información de los dispositivos. La mayoría de ficheros del resto de directorios son enlaces simbólicos que apuntan aquí.

/sys/bus: Información de los buses de comunicaciones (USB, PCI….) Los drivers están en /sys/bus/pci/drivers

/sys/block: Dispositivos de bloque. Son enlaces simbólicos a ficheros de la carpeta /sys/devices

/sys/class: muestra los dispositivos agrupados por clases (red, sonido, impresoras….)

/proc procfs es un sistema de ficheros virtual, generado dinánicamente durante el arranque de sistema y almacenado en RAM. Contiene la información de los procesos proporcionada por el núcleo de Linux. Actualmente, además de procesos, contiene información sobre el hardware. Muchas aplicaciones de espacio de usuario se basan en /proc para acceder a la información del núcleo del sistema. Ejemplos: /proc/interrupts /proc/dma /proc/ioports En procfs, cada proceso tiene una carpeta propia, llamados por su PID. En ella contiene información detallada sobre cada uno de ellos. La herramienta sysctl permite modificar los parámetros del kernel sin necesidad de recompilar. Los parámetros se encuentran en forma de ficheros, en /proc/sys. Se puede consultar un listado de todos los parámetros con \$sysctl -a

/dev

Device file system permite al software interactuar con los dispositivos hardware utilizando las mismas llamadas de sistema que se utilizarían para trabajar con ficheros. Hacen de interfaz con los controladores de los dispositivos. Los ficheros pueden ser:

  • Periféricos, como impresoras
  • Dispositivos de almacenamiento
  • Particiones
  • Dispositivos especiales (generadores de números aleatorios, ceros….)

Existen tres tipos especiales de dispositivo:

  • Dispositivos de caracteres: les llega el flujo de datos de caracter en caracter. (ttys)
  • Dispositivos de bloque: les llega el flujo de datos en bloques. Soportan acceso aleatorio a los datos. (hds)
  • Pseudo-dispositivos: no corresponden a ningún hardware específico.

  • /dev/null: Acepta todo tipo de datos de entrada y los descarta. No produce ninguna salida

  • /dev/full: Dispositivo que siempre está lleno
  • /dev/loop: Dispositivo de bucle
  • /dev/zero: Produce un flujo de datos continuo de caracteres NULL (cero
  • /dev/random: Produce un flujo de datos de números aleatorios. Bloquea
  • /dev/urandom: Produce un flujo de datos de números aleatorios. No bloquea. Convención de nombres:
  • fb: frame buffer
  • fd: disquete
  • hd: disco duro
  • lp: impresora
  • ttyUSB: conversor serie-usb
  • ttyS: controlador del puerto serire
  • parport,pp: puerto paralelo
  • pt: pseudo terminales
  • sd: controlador de dispositivo de almacenamiento masivo. sda: primer dispositivo registrado. sda1: primera partición del primer dispositivo registrado
  • sg: controlador SCSI genérico
  • sr: controlador ROM (dispositivos ópticos)
  • st: controlador de cintas magnéticas
  • tty: consolas virtuales

social