Cómo usar Udev para la detección y administración de dispositivos en Linux


Udev (espacio de usuario /dev ) es un subsistema Linux para la detección y administración dinámica de dispositivos, desde la versión del kernel 2.6 Es un reemplazo de devfs y hotplug .

Crea o elimina dinámicamente los nodos del dispositivo (una interfaz a un controlador de dispositivo que aparece en un sistema de archivos como si fuera un archivo ordinario, almacenado en el directorio /dev ) al momento del inicio o si agrega Dispositivo para o eliminar un dispositivo del sistema. Luego, propaga información sobre un dispositivo o cambia su estado al espacio del 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 dispositivos persistentes para garantizar un nombre coherente de los dispositivos durante los reinicios, a pesar de su orden de descubrimiento. Esta característica es útil porque el kernel 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 de las distribuciones de Linux modernas, si no todas, vienen con Udev como parte de la instalación predeterminada.

Aprende lo básico de Udev en Linux

El demonio udev , systemd-udevd (o systemd-udevd.service ) se comunica con el kernel y recibe el dispositivo uevents directamente desde él cada vez que agregue o elimine un dispositivo del sistema, o un dispositivo cambie su estado.

Udev se basa en reglas, son reglas flexibles y muy poderosas. 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 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 utilizando ciertos atributos como la etiqueta , número de serie , su número mayor y menor Usado, número de dispositivo de bus y mucho más. Esta información es exportada por el sistema de archivos sysfs .

Cada vez que conectas un dispositivo al sistema, el núcleo lo detecta y lo 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 demonio udev, puede usar la utilidad udevadm .

Para mostrar los eventos ( uevents ) y eventos udev del kernel recibidos (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 AGREGAR 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

Desde la salida del comando anterior, el disco USB se denomina sdb1 (la ruta absoluta debe ser /dev/sdb1 ). Para consultar los atributos del dispositivo desde la base de datos udev, use el comando de información .

$ udevadm info /dev/sdb1

Cómo trabajar con las reglas de Udev en Linux

En esta sección, analizaremos brevemente cómo escribir las reglas de 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.

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

Comencemos creando los dos scripts:

$ sudo vim /bin/device_added.sh

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

#!/bin/bash
echo "USB device added at $(date)" >>/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 "USB device removed  at $(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, creamos una regla para activar la ejecución de los scripts anteriores, llamados /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:

  • "==": is an operator to compare for equality.
  • "+=": is an operator to add the value to a key that holds a list of entries.
  • SUBSYSTEM: matches the subsystem of the event device.
  • ACTION: matches the name of the event action.
  • ENV{DEVTYPE}: matches against a device property value, device type in this case.
  • RUN: specifies a program or script to execute as part of the event handling.

Guarde el archivo y ciérrelo. Luego, como root, diga a systemd-udevd que vuelva a cargar los archivos de reglas (esto también vuelve a cargar 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, el archivo scripts.log debe crearse en /tmp .

$ ls -l /tmp/scripts.log

Luego, el archivo debe tener una entrada como " dispositivo USB eliminado en la fecha y hora ", como se muestra en la captura de pantalla.

$ cat /tmp/scripts.log

Para obtener más información sobre cómo escribir las reglas udev y administrar udev, consulte las entradas del manual udev y udevadm respectivamente, ejecutando:

$ man udev
$ man udevadm

Udev es un administrador de dispositivos notable que proporciona una forma dinámica de configurar nodos de dispositivos en el directorio /dev Asegura que los dispositivos se configuren tan pronto como se conectan y se descubren. Propaga información sobre un dispositivo procesado o cambia a su estado, al espacio del usuario.

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

Todos los derechos reservados © Linux-Console.net • 2019-2021