Linux y el manejo del hardware

Hardware en Linux

Hace unas semanas que estoy tratando de hacer andar un sistema de discos iscsi. La idea es tener un servidor iscsi o target como se llama al cual puedan conectarse los clientes de manera que vean los discos en el servidor como si estuvieran conectados físicamente a nivel de hardware. Pero de esto hablaré en un post futuro cuando termine de retocar todo el sistema. El tema viene al caso porque para poner todo a andar tuve que estudiar bastante el tema del hardware en Linux. Sabía que las cosas habían cambiado bastante en lo que respecta al hardware desde la aparición del kernel 2.6, pero sinceramente no entendía como funcionaba el tema del hardware en Linux. Fue solo cuestión de investigar.

En las últimas versiones de linux varios se han quedado maravillados con lo bien que funciona la detección de hardware, por ejemplo como se montan automáticamente los discos usb o como se reconocen automáticamente las cámaras digitales. Investigando un poco entendemos como los sistemas 2.6 manejan el hardware. Los programas envueltos en el manejo de dispositivos son los siguientes:

  • Kernel (por supueso)
  • Udev – Hotplug
  • Hal
  • D-bus
  • Clientes Hal (O programas con soporte Hal)

El kernel

El kernel es el encargado de comunicarse con el dispositivo y hacerlo funcionar. Además para que un dispositivo funcione debe estar soportado por el kernel. Por ejemplo si tenemos un disco IDE, el kernel tiene que estar compilado con soporte IDE. Además es el kernel el que recibe la información del hardware conectado. A partir del kernel 2.6 esta información es manejada a traves de sysfs. ¿Qué es sysfs? Es sencillamente un sistema de archivos virtual que organiza toda la información del hardware conectado bajo el directorio /sys (Algo parecido a lo que sucede con /proc). Esta información aparece bajo distintos ficheros y directorios del árbol, organizada de distintas formas: por bus, por clase, etc.

Udev – Hotplug

Ahora bien, los programas de usuario final no acceden directamente a los dispositivos en /sys. Aquí es donde entra Udev. Udev es el encargado de crear los dispositivos en el tradicional directorio /dev. Por ejemplo /dev/hda para un disco duro IDE. Anteriormente al kernel 2.6 el manejo de dispositivos en este directorio era muy complicado. Había que crear un nodo de para todo dispositivo posible, por eso /dev llegaba a tener miles de entradas. Con Udev este problema se soluciona, ya que se encarga de leer la información de /sys y crear un nodo para cada dispositivo conectado.

Básicamente las funciones de Udev se dividen en:

Creación de dispositivos y nombrado

Udev dispone de reglas de nombrado y renombrado de dispositivo bajo /dev. De manera que al conectarse un dispositivo Udev puede seguir reglas personalizables para dar un nombre específico a cada dispositivo. Así por ejemplo si el kernel indica que se ha conectado una unidad grabadora de cd’s, el dispositivo se puede crear como /dev/cdrw y no necesariamente, por ejemplo /dev/hdc. Además Udev puede gestionar nombres de manera estática. Por ejemplo las reglas de Udev permiten que los nombres de las interfaces de red se mantengan después de reiniciar el equipo aunque se quite una interfaz de red. Algo que no pasaba en sistemas anteriores en los que las interfaces de red se confundían si se quitaban placas, etc. No solo eso, sino que otra funcionalidad de Udev permite crear links simbólicos para los nombres de las unidades. Por ejemplo el nodo para un reproductor ipod puede ser creado como /dev/sda1, pero además se le puede crear un link simbólico con un nombre más representativo como /dev/ipod1. Incluso en base al número de serie del dispositivo las reglas pueden indicar que se reserve ese nombre solamente para ese dispositivo. Por último Udev también gestiona los permisos y el propietario con los que debe crearse el dispositivo.

Carga de módulos.

Esta función en realidad la hace Hotplug; sin embargo desde la versión 0.59 de Udev, Hotplug se integró dentro de Udev. También en base a reglas cada vez que un dispositivo es encontrado o conectado, Udev-Hotplug lee la información que el kernel entrega en /sys y determina el modelo del dispositivo, y en base a ello carga el módulo o driver apropiado en el kernel, para que este último pueda acceder al dispositivo.

Ejecución de programas

Por último Udev-Hotplug puede ejecutar programas específicos al detectarse o conectarse un dispositivo. Algunos programas son lanzados para configurar el hardware, actualizar el firmware del dispositivo, etc. No todos los dispositivos necesitan que se ejecute un programa para que funcionen, solo los que cumplen con las reglas que maneja Udev-Hotplug y que por supuesto son personalizables.

Hal y D-bus

Hal significa Hadware Abstaction Layer, o Capa de Abstracción de Hardware. Hal presenta el hardware a las aplicaciones de usuario final. Para ello se conecta a través de un socket a Udev y con la información obtenida construye una base de datos con todo el hardware conectado y las características de dicho hardware. Además avisa de cualquier cambio en el hardware a las aplicaciones con soporte para Hal. Para poder comunicarse con otras aplicaciones utiliza D-bus que es un programa que crea un bus de notificaciones para la intercomunicación entre aplicaciones.

Aplicaciones con soporte Hal y D-bus

Estas aplicaciones se caracterizan porque utilizan D-bus para comunicarse y porque están construidas con soporte para interrogar a Hal a través del api Hal. Por ejemplo gnome-volume-manager es una aplicación con soporte Hal. Este programa recibe las notificaciones de Hal cuando se ha conectado un dispositivo al sitema, entre esta información no solo está el archivo del dispositivo en /dev, sino también, información sobre el tipo de dispositivo; por ejemplo la marca, el modelo y el tipo: pen drive, cámara digital, reproductor de mp3, etc. Basándose en esa información, gnome-volume-manager crea un punto de montaje en /media facilmente reconocilbe, por ejemplo /media/pen-drive para un disco usb, luego crea una línea para ese dispositivo en /etc/fstab y lo monta (En Debian el proceso es diferente, solo se monta el dispositivo con el comando pmount y no se modifca /etc/fstab). Además como sabe qué tipo de dispositivo se ha conectado puede asignarle un ícono acorde, en el ejemplo el ícono sería el de un disco usb. Por otra parte cuando el disco es quitado del sistema Hal avisa a gnome-volume-manager y este lo desmonta.

Hay que notar que hay diferentes aplicaciones que utilizan el api Hal. Por ejemplo, hal-device-manager es una aplicación gtk que muestra todos los dispositivos conectados, reportados por Hal y sus características. Otros programas encargados de manejar cámaras digitales, escáners e impresoras también implementan soporte para Hal.

Links sobre este tema:

Explore posts in the same categories: Linux

10 comentarios en “Linux y el manejo del hardware”

  1. Bayrouni Says:

    Hola, y Bravo.

    Desde ya hace mucho tiempo, intento comprender udev,hotplug,d-bus y hal. Era una sorpresa para mi ver tu articulo hablando exactamente de lo qué justamente queria comprender.

    El problema cuando leia otros articulos sobre hal,debus,hotplug y udev es que no se mostraba la relacion entre cada uno de estos componentes de manera clara y sencialla.

    Tu articuo es estupendo.
    Y por fin he comprendido el funcionamiento …

    Como sugerencia, , porque no an’a’des mas detalles para cada uno de estos componentes illustrado cada vez con ejemplos concretos .

    Gracias por este excelente articulo.

    Bayrouni

  2. meneame.net Says:

    Una reseña de como se maneja el hardware en Linux

    Una reseña que explica cómo funciona la detección y configuración del hardware en Linux. Muy buena para entender todo lo relacionado con Udev, Hal, D-bus. Se explica por ejemplo como es el proceso para reconcer y montar pen drives y dispositivos pa…

  3. NickT Says:

    Excelente articulo, gracias.

  4. pregunta Says:

    hola yo quisiera preguntar si es conbeniente que un ipod se cargue con un adaptador para USB osea separado de un computador


  5. […] sistema operativo. Es realmente útil para poder comprender el funcionamiento de nuestros sistemas. Aquí os pongo el enlace para que todos le echeis un vistazo. No tiene desperdicio. Yo adjunto aquí la […]

  6. vanessa Says:

    hola yo quisiera decir mi numero es 43693860 solo mensajes

  7. zoedhard Says:

    kisiera saber si alguin conoce alguna aplicacion ya existente para montaje y desmontaje de dispositivos hotplug basado en le demonio hotplug y udev


  8. […] linux y el manejo del hardware page tags: administration computing documentation linux system page_revision: 10, last_edited: 1241560716|%e %b %Y, %H:%M %Z (%O ago) edittags history files print site tools+ options edit sections append backlinks view source parent block rename delete help | terms of service | privacy | report a bug | flag as objectionable Hosted by Wikidot.com — get your free wiki now! Unless stated otherwise Content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License Click here to edit contents of this page. Click here to toggle editing of individual sections of the page (if possible). Watch headings for an “edit” link when available. Append content without editing the whole page source. Check out how this page has evolved in the past. If you want to discuss contents of this page – this is the easiest way to do it. View and manage file attachments for this page. A few useful tools to manage this Site. See pages that link to and include this page. Change the name (also URL address, possibly the category) of the page. View wiki source for this page without editing. View/set parent page (used for creating breadcrumbs and structured layout). Notify administrators if there is objectionable content in this page. Something does not work as expected? Find out what you can do. General Wikidot.com documentation and help section. Wikidot.com Terms of Service – what you can, what you should not etc. Wikidot.com Privacy Policy. _uacct = “UA-4911621-1”; urchinTracker(); _uff = false; _uacct = “UA-68540-5″; _udn=”wikidot.com”; urchinTracker(); _qoptions={ qacct:”p-edL3gsnUjJzw-” }; […]

  9. andrei Says:

    interesante post amigo


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: