LinuxParty
Udev (userspace /dev ) es un subsistema de Linux para la detección y gestión dinámica de dispositivos, desde la versión 2.6 del kernel. Es un reemplazo de devfs y hotplug .
Crea o elimina dinámicamente nodos de dispositivo (una interfaz para un controlador de dispositivo que aparece en un sistema de archivos como si fuera un archivo ordinario, almacenado en el directorio /dev ) en el momento del arranque o si agrega un dispositivo o lo elimina de el sistema. Luego propaga información sobre un dispositivo o cambia su estado al espacio de usuario.
Su función es 1) suministrar a las aplicaciones del sistema eventos del dispositivo, 2) administrar los permisos de los nodos del dispositivo y 3) puede crear enlaces simbólicos útiles en el directorio /dev para acceder a los dispositivos, o incluso cambiar el nombre de las interfaces de red.
Una de las ventajas de udev es que puede usar nombres de dispositivo persistentes para garantizar un nombre constante de los dispositivos en los reinicios, a pesar de su orden de descubrimiento. Esta característica es útil porque el núcleo simplemente asigna nombres de dispositivos impredecibles según el orden de descubrimiento.
En este artículo, aprenderemos cómo usar Udev para la detección y administración de dispositivos en sistemas Linux. Tenga en cuenta que la mayoría, si no todas las distribuciones de Linux modernas convencionales vienen con Udev como parte de la instalación predeterminada.
Aprenda los conceptos básicos de Udev en Linux
El demonio udev , systemd-udevd (o systemd-udevd.service ) se comunica con el núcleo y recibe los eventos del dispositivo directamente de él cada vez que agrega o elimina un dispositivo del sistema, o un dispositivo cambia su estado.
Udev se basa en reglas: sus reglas son flexibles y muy potentes. Cada evento de dispositivo recibido se compara con el conjunto de reglas leídas de los archivos ubicados en /lib/udev/rules.d y /run/udev/rules.d .
Puede escribir archivos de reglas personalizadas en el directorio /etc/udev/rules.d/ (los archivos deben terminar con la .rules
extensión) para procesar un dispositivo. Tenga en cuenta que los archivos de reglas en este directorio tienen la máxima prioridad.
Para crear un archivo de nodo de dispositivo, udev necesita identificar un dispositivo usando ciertos atributos como la etiqueta , el número de serie , su número mayor y menor utilizado, el número de dispositivo del bus y mucho más. Esta información es exportada por el sistema de archivos sysfs .
Cada vez que conecta un dispositivo al sistema, el núcleo lo detecta e inicializa, y se crea un directorio con el nombre del dispositivo en el directorio / sys / que almacena los atributos del dispositivo.
El archivo de configuración principal para udev es /etc/udev/udev.conf , y para controlar el comportamiento en tiempo de ejecución del udev daemon, puede usar la utilidad udevadm .
Para mostrar los eventos del núcleo recibidos ( uevents ) y los eventos udev (que udev envía después del procesamiento de la regla), ejecute udevadm con el comando monitor. Luego, conecte un dispositivo a su sistema y observe, desde la terminal, cómo se maneja el evento del dispositivo.
La siguiente captura de pantalla muestra un extracto de un evento ADD después de conectar un disco flash USB al sistema de prueba:
$ udevadm monitor
Para encontrar el nombre asignado a su disco USB, use la utilidad lsblk que lee el sistema de archivos sysfs y udev db para recopilar información sobre los dispositivos procesados.
$ lsblk
A partir de la salida del comando anterior, se nombra el disco USB sdb1
(la ruta absoluta debe ser /dev/sdb1
). Para consultar los atributos del dispositivo desde la base de datos udev, use el comando info .
$ udevadm info /dev/sdb
Cómo trabajar con reglas Udev en Linux
En esta sección, discutiremos brevemente cómo escribir reglas udev . Una regla se compone de una lista separada por comas de uno o más pares clave-valor. Las reglas le permiten cambiar el nombre de un nodo de dispositivo del nombre predeterminado, modificar los permisos y la propiedad de un nodo de dispositivo, activar la ejecución de un programa o script cuando se crea o elimina un nodo de dispositivo, entre otros.
Escribiremos una regla simple para iniciar un script cuando se agregue un dispositivo USB y cuando se elimine del sistema en ejecución.
Comencemos creando los dos scripts:
$ sudo vim /bin/device_added.sh
Agregue las siguientes líneas en el device_added.sh
script.
#!/bin/bash echo "Dispositivo USB agregado en fecha: $(date)" >>/tmp/scripts.log
Abre el segundo script.
$ sudo vim /bin/device_removed.sh
Luego agregue las siguientes líneas al device_removed.sh
script.
#!/bin/bash echo "Dispositivo USB eliminado en fecha: $(date)" >>/tmp/scripts.log
Guarde los archivos, cierre y haga que ambos scripts sean ejecutables.
$ sudo chmod +x /bin/device_added.sh $ sudo chmod +x /bin/device_removed.sh
A continuación, creemos una regla para activar la ejecución de los scripts anteriores, llamada /etc/udev/rules.d/80-test.rules .
$ vim /etc/udev/rules.d/80-test.rules
Agregue estas dos reglas siguientes en él.
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"
dónde:
"=="
: es un operador para comparar por igualdad."+="
: es un operador para agregar el valor a una clave que contiene una lista de entradas.- SUBSYSTEM: coincide con el subsistema del dispositivo de evento.
- ACTION: coincide con el nombre de la acción del evento.
- ENV{DEVTYPE}: coincide con un valor de propiedad del dispositivo, tipo de dispositivo en este caso.
- RUN: especifica un programa o script para ejecutar como parte del manejo de eventos.
Guarde el archivo y ciérrelo. Luego, como root, dígale a systemd-udevd que vuelva a cargar los archivos de reglas (esto también recarga otras bases de datos, como el índice del módulo del kernel), ejecutando.
$ sudo udevadm control --reload
Ahora conecte una unidad USB a su máquina y verifique si device_added.sh
se ejecutó el script. En primer lugar, el archivo scripts.log debe crearse en / tmp .
$ ls -l /tmp/scripts.log
[root@localhost ~]# ls -l /tmp/scripts.log
-rw-r--r-- 1 root root 194 may 21 19:09 /tmp/scripts.log
[root@localhost ~]# cat /tmp/scripts.log
Dispositivo USB agregado en fecha Thu May 21 19:09:42 CEST 2020
Dispositivo USB eliminado en fecha: Thu May 21 19:09:45 CEST 2020
Dispositivo USB agregado en fecha Thu May 21 19:09:48 CEST 2020
[root@localhost ~]#
Luego, el archivo debe tener una entrada como " Dispositivo USB eliminado en fecha_hora ", como se muestra en la captura de pantalla.
$ cat /tmp/scripts.log
[root@localhost ~]# cat /tmp/scripts.log
Dispositivo USB agregado en fecha Thu May 21 19:09:42 CEST 2020
Dispositivo USB eliminado en fecha: Thu May 21 19:09:45 CEST 2020
Dispositivo USB agregado en fecha Thu May 21 19:09:48 CEST 2020
[root@localhost ~]#
Para obtener más información sobre cómo escribir reglas udev y administrar udev, consulte las entradas manuales udev y udevadm respectivamente, ejecutando:
$ man udev $ man udevadm
Resumen
Udev es un administrador de dispositivos notable que proporciona una forma dinámica de configurar nodos de dispositivos en el /dev
directorio. Asegura que los dispositivos se configuran tan pronto como se enchufan y se descubren. Propaga información sobre un dispositivo procesado o cambia a su estado, al espacio del usuario.
Si tiene preguntas o ideas para compartir sobre este tema, use el formulario de comentarios.
-
Hardware
- Cómo Imprimir desde la Línea de Comandos en Linux y Solucionar Problemas con Impresoras en Red
- Los 5 mejores comandos de Linux para solucionar problemas (y cómo los uso)
- 5 comandos de Linux para encontrar rápidamente la información de tu Sistema Operativo
- El controlador de gráficos NVIDIA 560 Linux adoptará completamente módulos de kernel de GPU de código abierto
- El 84% de los usuarios de PC no están dispuestos a pagar más por un hardware con soporte para IA, según una encuesta
- ¿PC con Linux o Windows 11 Copilot+? TUXEDO presenta el portátil Snapdragon X Elite ARM
- La startup finlandesa 'Flow' afirma que puede multiplicar por 100 la potencia de cualquier CPU con su chip complementario
- China lanza el buque portacontenedores eléctrico más grande del mundo
- Testar el rendimiento de discos duros en Linux
- ¿Por qué los portátiles están soldando sus RAM a la placa?
- TUXEDO Sirius 16 Gen2, el portátil de juegos Linux completamente AMD, recibe un CPU Ryzen 7 más rápido
- Clonezilla Live ahora está parcheado contra la puerta trasera XZ, con tecnología Linux 6.7
- La computadora de escritorio LXQt 2.0 se lanza en abril con un nuevo menú de aplicaciones y portado a Qt 6
- Lanzamiento del controlador de gráficos NVIDIA 550.54.14 para Linux con muchas mejoras
- El firmware BIOS/UEFI de código abierto Libreboot agrega más soporte de hardware