Cómo utilizar Udev para la detección y gestión de dispositivos en Linux

Cómo utilizar Udev para la detección y gestión de dispositivos en Linux

Udev. (espacio de usuario /dev. es un subsistema de Linux para la detección y administración de dispositivos dinámicos, desde la versión del kernel 2.6. 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 normal, almacenado en el directorio /dev. en el momento del arranque o si agrega un dispositivo o lo elimina del sistema. Luego propaga información sobre un dispositivo o cambia su estado al espacio del usuario.

Su función es 1) proporcionar a las aplicaciones del sistema eventos de 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 persistent nombres de dispositivos para garantizar una denominación uniforme de los dispositivos en los reinicios, a pesar de su orden de descubrimiento. Esta función es útil porque el kernel simplemente asigna nombres de dispositivos impredecibles según el orden de descubrimiento.

En este artículo, aprenderemos a 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 modernas de Linux, vienen con Udev. como parte de la instalación predeterminada.

Aprenda los conceptos básicos de Udev en Linux

freestar.config.enabled_slots. push

El demonio udev. systemd-udevd. (o systemd-udevd. service. se comunica con el kernel y recibe uevents. de 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 poderosas. Cada evento de dispositivo recibido se compara con el conjunto de reglas leídas de 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 extensión .rules) para procesar un dispositivo. Tenga en cuenta que los archivos de reglas en este directorio tienen la prioridad más alta.

Para crear un archivo de nodo de dispositivo, udev. necesita identificar un dispositivo usando ciertos atributos como la etiqueta. número de serie. su número mayor y menor utilizado, número de dispositivo de bus y mucho más. Esta información es exportada por el sistema de archivos sysfs.

Siempre que conecta un dispositivo al sistema, el kernel lo detecta e inicializa, y se crea un directorio con el nombre del dispositivo en /sys/ directorio 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 demonio udev, puede usar la utilidad udevadm.

Para mostrar los eventos. del kernel recibidos ( uevents. y 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 flash USB disco al sistema de prueba:

$ udevadm monitor Supervisar eventos de dispositivos en Linux  Monitorizar dispositivo Eventos en Linux Monitorear eventos de dispositivos en Linux

Para encontrar el nombre asignado a su disco USB, use la utilidad lsblk que lee sysfs. sistema de archivos y udev db. para recopilar información sobre los dispositivos procesados.

$ lsblk  Lista de dispositivos de bloque en Linux  Listar dispositivos de bloque en Linux Listar dispositivos de bloque en Linux

De la salida del comando anterior, el USB el disco se llama 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/sdb1  Consultar atributos de dispositivo de Udev DB en Linux  Consultar atributos de dispositivo desde Udev DB en Linux Consultar atributos de dispositivo desde Udev DB en Linux

Cómo trabajar con reglas Udev en Linux

En esta sección, discutiremos brevemente cómo escribe 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 desde el 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.

Lo haremos escriba una regla simple para iniciar un script cuando se agrega un dispositivo USB y cuando se elimina del sistema en ejecución.

Comencemos por crear los dos scripts:

$ sudo vim/bin/device_added .sh

Agregue las siguientes líneas en el script device_added.sh.

#!/bin/bash echo “Dispositivo USB agregado en $ (fecha)”>>/tmp/scripts.log

Abra el segundo script.

$ sudo vim/bin/device_removed.sh

Luego, agregue las siguientes líneas al script device_removed.sh.

#!/bin/bash echo “Dispositivo USB eliminado en $ (fecha) “>>/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.

SUBSYSTEM == “usb”, ACTION == “agregar”, ENV DEVTYPE == “usb_device”, RUN + = “/bin/device_added.sh” SUBSYSTEM == “usb”, ACTION == “eliminar”, ENV DEVTYPE == “usb_device”, RUN + = “/bin/device_removed.sh”

donde:

  • “==”: es un operador para comparar la 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 eventos.
  • ACTION. coincide con el nombre de la acción del evento.
  • ENV DEVTYPE. coincide con un valor de propiedad de dispositivo, tipo de dispositivo en este caso.
  • EJECUTAR. especifica un programa o secuencia de comandos para ejecutar como parte del manejo de eventos.

Guarde el archivo y cierre eso. Luego, como root, dile a systemd-udevd. que recargue 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 se ejecutó el script device_added.sh. En primer lugar, debe crearse el archivo scripts.log. en /tmp.

$ ls-l/tmp/scripts.log  Verifique el registro de scripts después de agregar USB Verificar el registro de scripts después de agregar USB Verificar el registro de scripts después de agregar USB

Luego, el archivo debe tener una entrada como “ Dispositivo USB eliminado en date_time. , como se muestra en la captura de pantalla. .

$ cat/tmp/scripts.log  Verificar el registro de scripts después de quitar el USB  Comprobar el registro de scripts después de quitar el USB Verificar el registro de scripts después de quitar el USB

Para obtener más información sobre cómo escribir reglas de udev y administrar udev, consulte las entradas manuales udev. y udevadm. respectivamente, por en ejecución:

$ man udev $ man udevadm Resumen

Udev. es un administrador de dispositivos extraordinario que proporciona una forma dinámica de configurar nodos de dispositivos en el directorio/dev. Garantiza que los dispositivos se configuren tan pronto como se conecten y descubran. Propaga información sobre un dispositivo procesado o cambios en su estado, al espacio del usuario.

Si tiene alguna pregunta o idea que compartir sobre este tema, utilice el formulario de comentarios.

Leave a comment

Your email address will not be published. Required fields are marked *