Udev

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Administrador de dispositivos para el kernel de Linux

udev (espacio de usuario /dev) es un administrador de dispositivos para el kernel de Linux. Como sucesor de devfsd y hotplug, udev administra principalmente nodos de dispositivos en el directorio /dev. Al mismo tiempo, udev también maneja todos los eventos de espacio de usuario que surgen cuando se agregan o eliminan dispositivos de hardware al sistema, incluida la carga de firmware según lo requieran ciertos dispositivos.

Justificación

Es el kernel de un sistema operativo que se encarga de proporcionar una interfaz abstracta del hardware al resto del software. Al ser un kernel monolítico, el kernel de Linux hace exactamente eso: los controladores de dispositivos son parte del kernel de Linux y constituyen más de la mitad de su código fuente. Se puede acceder al hardware a través de llamadas al sistema o a través de sus nodos de dispositivo.

Para poder manejar dispositivos periféricos con capacidad de conexión en caliente de una manera fácil de usar, una parte del manejo de todos estos dispositivos de hardware con capacidad de conexión en caliente se transfirió del kernel a un demonio que se ejecuta en el espacio de usuario. La ejecución en el espacio del usuario tiene fines de seguridad y estabilidad.

Diseño

Los controladores de dispositivos son parte del kernel de Linux, en el que sus funciones principales incluyen el descubrimiento de dispositivos, la detección de cambios de estado del dispositivo y funciones similares de hardware de bajo nivel. Después de cargar un controlador de dispositivo en la memoria desde el kernel, los eventos detectados se envían al demonio del espacio de usuario udevd. Es el administrador de dispositivos, udevd, el que detecta todos estos eventos y luego decide qué sucederá a continuación. Para ello, udevd cuenta con un conjunto muy completo de archivos de configuración, que el administrador del ordenador puede ajustar según sus necesidades.

  • En caso de que un nuevo dispositivo de almacenamiento esté conectado a USB, udevd es notificado por el núcleo y en sí mismo notifica el udisksd-daemon. Ese daemon podría montar los sistemas de archivos.
  • En caso de que un nuevo cable Ethernet esté conectado a la red Ethernet NIC, udevd es notificado por el núcleo y en sí mismo notifica el NetworkManager-daemon. El NetworkManager-daemon podría comenzar dhclient para ese NIC, o configurarse según alguna configuración manual.

La complejidad de hacerlo obliga a los autores de aplicaciones a volver a implementar la lógica de soporte de hardware. Algunos dispositivos de hardware también requieren programas auxiliares privilegiados para prepararlos para su uso. A menudo deben invocarse de maneras que pueden resultar incómodas de expresar con el modelo de permisos de Unix (por ejemplo, permitir a los usuarios unirse a redes inalámbricas sólo si han iniciado sesión en la consola de vídeo). Los autores de aplicaciones recurren al uso de binarios setuid o ejecutan demonios de servicio para proporcionar su propio control de acceso y separación de privilegios, lo que potencialmente introduce agujeros de seguridad cada vez.

HAL fue creado para lidiar con esto, pero ahora está deprecatado en la mayoría de las distribuciones Linux.

Sinopsis

A diferencia de los sistemas Unix tradicionales, donde los nodos de dispositivo en el directorio /dev han sido un conjunto estático de archivos, el administrador de dispositivos udev de Linux proporciona dinámicamente solo los nodos para los dispositivos. realmente presente en un sistema. Aunque devfs solía proporcionar una funcionalidad similar, Greg Kroah-Hartman citó varias razones para preferir udev a devfs:

  • udev soporta la nominación de dispositivo persistente, que no depende, por ejemplo, del orden en el que los dispositivos están conectados al sistema. La configuración udev predeterminada proporciona nombres persistentes para dispositivos de almacenamiento. Cualquier disco duro es reconocido por su sistema de archivos único id, el nombre del disco y la ubicación física en el hardware al que está conectado.
  • udev ejecuta completamente en el espacio de usuario, en lugar del espacio del núcleo de devfs. Una consecuencia es que udev movió la política de nominación del núcleo y puede ejecutar programas arbitrarios para componer un nombre para el dispositivo de las propiedades del dispositivo, antes de que se cree el nodo; allí, todo el proceso es interrumpible y funciona con una prioridad menor.

La udev, en su conjunto, se divide en tres partes:

  • Biblioteca libudev que permite el acceso a la información del dispositivo; se incorporó en el paquete de software de 183 sistema.
  • Daemon del espacio de usuario udevd que administra el virtual /dev.
  • Servicios administrativos de línea de mando udevadm para el diagnóstico.

El sistema recibe llamadas del kernel a través del socket netlink. Las versiones anteriores usaban hotplug y agregaban un enlace a sí mismas en /etc/hotplug.d/default con este propósito.

Operación

udev se ha incorporado en el sistema 183

udev es un administrador de dispositivos genérico que se ejecuta como un demonio en un sistema Linux y escucha (a través de un socket netlink) los eventos que envía el kernel si se inicializa un nuevo dispositivo o se elimina un dispositivo del sistema. El paquete udev viene con un extenso conjunto de reglas que coinciden con los valores exportados del evento y las propiedades del dispositivo descubierto. Una regla coincidente posiblemente nombrará y creará un nodo de dispositivo y ejecutará programas configurados para instalar y configurar el dispositivo.

Las reglas de udev pueden coincidir en propiedades como el subsistema del kernel, el nombre del dispositivo del kernel, la ubicación física del dispositivo o propiedades como el número de serie del dispositivo. Las reglas también pueden solicitar información de programas externos para nombrar un dispositivo o especificar un nombre personalizado que siempre será el mismo, independientemente del orden en que el sistema descubra los dispositivos.

En el pasado, una forma común de utilizar udev en sistemas Linux era permitirle enviar eventos a través de un socket a HAL, que realizaría más acciones específicas del dispositivo. Por ejemplo, HAL notificaría a otro software que se ejecuta en el sistema que ha llegado el nuevo hardware emitiendo un mensaje de difusión en el sistema D-Bus IPC a todos los procesos interesados. De esta manera, los escritorios como GNOME o K Desktop Environment 3 podrían iniciar el explorador de archivos para explorar los sistemas de archivos de las unidades flash USB y tarjetas SD recién conectadas.

A mediados de 2011, HAL había quedado obsoleto en la mayoría de las distribuciones de Linux, así como en los entornos de escritorio KDE, GNOME y Xfce, entre otros. La funcionalidad previamente incorporada en HAL se ha integrado en el propio udev o se ha trasladado a software independiente, como udisks y upower.

  • udev proporciona acceso de bajo nivel al árbol del dispositivo linux. Permite a los programas enumerar dispositivos y sus propiedades y obtener notificaciones cuando los dispositivos vienen y van.
  • dbus es un marco para permitir que los programas se comuniquen entre sí, de forma segura, fiable y con una interfaz de programación orientada al objeto de alto nivel.
  • udisks (antes conocido como DeviceKit-disks) es un daemon que se encuentra en la parte superior de libudev y otras interfaces del kernel y proporciona una interfaz de alto nivel a los dispositivos de almacenamiento y es accesible a través de dbus a aplicaciones.
  • upower (anteriormente conocido como DeviceKit-power) es un daemon que se encuentra en la parte superior de libudev y otras interfaces del kernel y proporciona una interfaz de alto nivel para la gestión de energía y es accesible a través de dbus a aplicaciones.
  • NetworkManager es un daemon que se encuentra en la parte superior de libudev y otras interfaces del kernel (y un par de otros daemons) y proporciona una interfaz de alto nivel a la configuración y configuración de red y es accesible a través de dbus a aplicaciones.

udev recibe mensajes del kernel y los pasa a demonios del subsistema como Network Manager. Las aplicaciones se comunican con Network Manager a través de D-Bus.

udev -> Network Manager D-Bus Firefox}}}" xmlns="http://www.w3.org/1998/Math/MathML">Kernelrestablecimiento restablecimiento udevrestablecimiento restablecimiento RedManager↽ ↽ − − − − ⇀ ⇀ D− − Bus↽ ↽ − − − − ⇀ ⇀ Firefox{displaystyle {ce {Kernel - confianza udev - confianza Administrador de redes: udev -> Network Manager D-Bus Firefox}}}" aria-hidden="true" class="mwe-math-fallback-image-inline mw-invert" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/911306d34679f49ba62fe9f8bdb26945b68055b3" style="vertical-align: -0.671ex; width:63.22ex; height:3.009ex;"/>

HAL está obsoleto y solo lo utiliza el código heredado. Ubuntu 10.04 se envió sin HAL. Inicialmente se planeó un nuevo demonio DeviceKit para reemplazar ciertos aspectos de HAL, pero en marzo de 2009, DeviceKit quedó obsoleto a favor de agregar el mismo código a udev como un paquete: udev-extras, y algunas funciones ahora se han trasladado a udev propiamente dicha.

Historia

udev se introdujo en Linux 2.5. La versión 2.6.13 del kernel de Linux introdujo o actualizó una nueva versión de la interfaz uevent. Un sistema que utilice una nueva versión de udev no arrancará con kernels anteriores a 2.6.13 a menos que udev esté deshabilitado y se utilice un directorio tradicional /dev para acceder al dispositivo.

En abril de 2012, el código base de udev se fusionó en el árbol de fuentes de systemd, lo que convirtió a systemd 183 en la primera versión que incluye udev. En octubre de 2012, Linus Torvalds criticó el enfoque de Kay Sievers para el mantenimiento de udev y la corrección de errores relacionados con la carga del firmware, afirmando:

Sí, hacerlo en el núcleo es "más robusto". Pero no juegues y detengas la mentira. Es más robusto porque tenemos mantenedores que se preocupan, y porque sabemos que las regresiones no son algo con lo que podemos jugar rápido y suelto. Si algo se rompe, y no sabemos cuál es la solución correcta para esa ruptura, nosotros revertir la cosa que rompió. Así que sí, estamos claramente mejor haciéndolo en el núcleo. No porque la carga de firmware no pueda hacerse en el espacio de usuario. Pero simplemente porque el mantenimiento de udev desde que Greg lo entregó ha ido cuesta abajo.

En 2012, el proyecto Gentoo Linux creó una bifurcación del código base udev de systemd para evitar la dependencia de la arquitectura systemd. La bifurcación resultante se llama eudev y hace que la funcionalidad udev esté disponible sin systemd. Un objetivo declarado del proyecto es mantener eudev independiente de cualquier distribución de Linux o sistema de inicio. El proyecto Gentoo describe eudev de la siguiente manera:

eudev es un tenedor de sistemad-udev con el objetivo de obtener una mejor compatibilidad con software existente como OpenRC y Upstart, núcleos antiguos, varias cadenas de herramientas y cualquier otra cosa requerida por los usuarios y diversas distribuciones.

El 29 de mayo de 2014, se eliminó de systemd el soporte para la carga de firmware a través de udev, ya que se decidió que es tarea del kernel cargar el firmware. Dos días después, Lennart Poettering sugirió posponer este parche hasta que udev comience a utilizar kdbus; en ese momento, el plan era cambiar udev para usar kdbus como sistema de mensajería subyacente y deshacerse del transporte basado en netlink de espacio de usuario a espacio de usuario.

Autores

udev fue desarrollado por Greg Kroah-Hartman y Kay Sievers, con mucha ayuda de Dan Stekloff, entre otros.

Contenido relacionado

Tarjeta perforada

Una tarjeta perforada es un trozo de papel rígido que contiene datos digitales representados por la presencia o ausencia de agujeros en posiciones...

CPython

CPython es la implementación de referencia del lenguaje de programación Python. Escrito en C y Python, CPython es la implementación predeterminada y más...

Arquitectura Harvard

La Arquitectura Harvard es un modelo de arquitectura informática que separa físicamente la memoria de código de programa de la memoria de almacenamiento de...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save