stringtranslate.com

desarrollo

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

Razón fundamental

Es el núcleo de un sistema operativo que se encarga de proporcionar una interfaz abstracta del hardware al resto del software. Al ser un núcleo monolítico , el núcleo de Linux hace exactamente eso: los controladores de dispositivos son parte del núcleo de Linux y constituyen más de la mitad de su código fuente. [2] 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 sencilla, una parte del manejo de todos estos dispositivos de hardware con capacidad de conexión en caliente se transfirió del núcleo a un demonio que se ejecuta en el espacio de usuario. La ejecución en el espacio de usuario sirve para fines de seguridad y estabilidad.

Diseño

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

La complejidad de hacerlo obligó a los autores de aplicaciones a reimplementar la lógica de soporte de hardware. Algunos dispositivos de hardware también requerían programas auxiliares privilegiados para prepararlos para su uso. Estos a menudo deben invocarse de formas que podrían resultar difíciles de expresar con el modelo de permisos de Unix (por ejemplo, permitir que los usuarios se unan a redes inalámbricas solo si están conectados a la consola de video). Los autores de aplicaciones recurrieron al uso de binarios setuid o a ejecutar daemons de servicio para proporcionar su propio control de acceso y separación de privilegios, lo que potencialmente introdujo agujeros de seguridad cada vez. [3]

HAL fue creado para lidiar con estos desafíos, pero ahora está obsoleto en la mayoría de las distribuciones de Linux y su funcionalidad ha sido reemplazada por udevd.

Descripción general

A diferencia de los sistemas Unix tradicionales , donde los nodos de dispositivos 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 presentes en un sistema. Aunque devfs solía proporcionar una funcionalidad similar, Greg Kroah-Hartman citó una serie de razones [4] para preferir udev sobre devfs:

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

El sistema recibe llamadas del núcleo a través del socket netlink . Las versiones anteriores utilizaban hotplug, agregando un enlace a sí mismas en /etc/hotplug.d/default con este propósito.

Operación

udev se ha incorporado a systemd 183 [5]

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

Las reglas de udev pueden coincidir con propiedades como el subsistema del núcleo, el nombre del dispositivo del núcleo, 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 a 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 usar udev en sistemas Linux era dejar que enviara eventos a través de un socket a HAL , que realizaría acciones específicas del dispositivo. Por ejemplo, HAL notificaría a otro software que se ejecuta en el sistema que el nuevo hardware había llegado 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 . [6]

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

udev recibe mensajes del núcleo y los pasa a los daemons del subsistema, como Network Manager. Las aplicaciones se comunican con Network Manager a través de D-Bus.

HAL está obsoleto y solo lo utiliza el código heredado. Ubuntu 10.04 se entregó 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 dicho.

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 la versión 2.6.13 a menos que udev esté deshabilitado y se utilice un directorio /dev tradicional para acceder al dispositivo.

En abril de 2012, la base de código de udev se fusionó con el árbol de código fuente de systemd , lo que convirtió a systemd 183 en la primera versión en incluir udev. [5] [10] [11] 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 de firmware , afirmando: [12]

Sí, hacerlo en el núcleo es "más robusto". Pero no juegues y deja de mentir. Es más robusto porque tenemos mantenedores que se preocupan y porque sabemos que las regresiones no son algo con lo que podamos jugar a la ligera. Si algo falla y no sabemos cuál es la solución correcta para ese problema, revertimos lo que falló. Así que sí, es claramente mejor hacerlo en el núcleo. No porque la carga de firmware no se pueda hacer en el espacio de usuario, sino simplemente porque el mantenimiento de udev desde que Greg lo abandonó 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 de udev esté disponible sin systemd. Un objetivo declarado del proyecto es mantener a eudev independiente de cualquier distribución Linux o sistema de inicio . [13] El proyecto Gentoo describe a eudev de la siguiente manera: [14]

eudev es una bifurcación de systemd-udev con el objetivo de obtener una mejor compatibilidad con software existente como OpenRC y Upstart , kernels más antiguos, varias cadenas de herramientas y cualquier otra cosa requerida por los usuarios y varias distribuciones.

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

Autores

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

Referencias

  1. ^ "Versión 256.7". 8 de octubre de 2024. Consultado el 27 de octubre de 2024 .
  2. ^ Marti, Don (2 de julio de 2007). "¿Están los mejores desarrolladores de Linux perdiendo la voluntad de programar?". ComputerworldUK . Archivado desde el original el 19 de julio de 2016. Consultado el 2 de junio de 2024 .
  3. ^ Pennington, Havoc (10 de julio de 2003), Cómo hacer que el hardware funcione
  4. ^ Greg Kroah-Hartman . «udev y devfs: la última palabra». Archivado desde el original ( Texto sin formato ) el 9 de julio de 2011. Consultado el 24 de enero de 2008 .
  5. ^ abc "systemd/systemd". GitHub . Consultado el 21 de agosto de 2016 .
  6. ^ "Gestión dinámica de dispositivos en Udev" (PDF) . Linux Magazine. 1 de octubre de 2006. Consultado el 14 de julio de 2008 .[ enlace muerto permanente ]
  7. ^ "Eliminación de HALRemoval". 28 de junio de 2011. Consultado el 13 de septiembre de 2011 .
  8. ^ "Thunar-volman y la descontinuación de HAL en Xfce". 17 de enero de 2010. Archivado desde el original el 26 de diciembre de 2017. Consultado el 25 de diciembre de 2017 .
  9. ^ Lennart Poettering (25 de abril de 2010). "¿Relación entre udev, hal, Dbus y DeviceKit?".
  10. ^ Sievers, Kay (3 de abril de 2012). "El futuro del árbol de código fuente de udev". linux-hotplug (Lista de correo) . Consultado el 22 de mayo de 2013 .
  11. ^ Sievers, Kay, "Confirmar la importación de udev en systemd", systemd , consultado el 22 de mayo de 2013
  12. ^ Linus Torvalds (3 de octubre de 2012). "Re: averías en udev". linux-kernel (lista de correo) . Consultado el 28 de octubre de 2014 .
  13. ^ "gentoo/eudev – README.md". GitHub . Consultado el 25 de diciembre de 2017 .
  14. ^ "Proyectos Gentoo Linux – Proyecto eudev de Gentoo". Archivado desde el original el 4 de septiembre de 2015. Consultado el 25 de diciembre de 2017 .
  15. ^ "[systemd-devel] [PATCH] Eliminar el cargador de firmware udev". 2014-05-29.
  16. ^ "[systemd-devel] [PATCH] Eliminar el cargador de firmware udev". 31/05/2014.

Enlaces externos