Gestión de dispositivos del sistema con el Administrador de dispositivos udev
Visión general de cómo el gestor de dispositivos udev detecta el hardware, gestiona los nodos de dispositivos y se integra con systemd en Oracle Linux.
El administrador de dispositivos udev se ejecuta como un servicio systemd para ayudar a proporcionar software con acceso predecible y gestionado a los dispositivos del sistema expuestos por el núcleo. Normalmente, udev gestiona los permisos de los nodos de dispositivo, crea enlaces simbólicos en el directorio /dev/ para que los nombres de dispositivos sean más predecibles y fáciles de identificar o cambie el nombre de las interfaces de red.
El gestor de dispositivos udev crea o elimina dinámicamente archivos de nodo de dispositivo en el momento del inicio. Al crear un nodo de dispositivo, udev lee el directorio /sys del dispositivo para atributos como la etiqueta, el número de serie y el número de dispositivo de bus.
udev puede utilizar nombres de dispositivos persistentes para garantizar una nomenclatura coherente de los dispositivos tras los reinicios, independientemente del orden de detección. Los nombres de dispositivos persistentes son especialmente importantes cuando se utilizan dispositivos de almacenamiento externo.
udev también maneja eventos de controladores de dispositivos que son activados por el núcleo y utiliza las reglas definidas en su configuración para disparar acciones particulares. Por ejemplo, si un dispositivo de almacenamiento USB está conectado al sistema, el núcleo notifica a udev y udev notifica al controlador adecuado para que se pueda montar el dispositivo. Además, si un cable de red está conectado a una tarjeta de interfaz de red, el núcleo notifica a udev el cambio de estado y udev notifica a NetworkManager para que se pueda realizar la acción adecuada para conectarse a la red.
El archivo de configuración para udev es /etc/udev/udev.conf, en el que puede definir la prioridad de registro udev_log, que se puede definir en err, info y debug. El valor por defecto es err. La configuración adicional de las reglas utilizadas por udev se maneja en archivos de reglas individuales en /etc/udev/rules.d/.
Para obtener más información, consulte la página del manual udev(7).
udev es un componente de systemd. Para obtener información adicional, consulte las guías de systemd específicas de la versión.
Para obtener más información sobre los conceptos de systemd utilizados por udev en las versiones de Oracle Linux, consulte Managing the System With systemd.
Para obtener más información sobre los sistemas de archivos virtuales del núcleo y los módulos de controladores de dispositivos, utilice los siguientes recursos específicos de la versión.
Para obtener más información sobre los sistemas de archivos virtuales del núcleo y los módulos de controladores de dispositivos en las versiones de Oracle Linux, consulte Managing Kernels and System Boot on Oracle Linux.
Acerca de los archivos de dispositivo
Explica cómo Oracle Linux representa el hardware como archivos de dispositivos, incluidos bloques, caracteres y pseudodispositivos.
El directorio /dev contiene archivos de dispositivo o nodos de dispositivo que proporcionan acceso a dispositivos periféricos, como discos duros, recursos en dispositivos periféricos, como particiones de disco, y pseudodispositivos, como un generador de números aleatorios.
El directorio /dev tiene varias jerarquías de subdirectorios, cada una de las cuales contiene archivos de dispositivos que se relacionan con un determinado tipo de dispositivo. Sin embargo, el contenido de estos subdirectorios se implementa como enlaces simbólicos a los archivos correspondientes en /dev. Por lo tanto, se puede acceder a los archivos a través del archivo vinculado en /dev o el archivo correspondiente en el subdirectorio.
El uso del comando ls -l /dev muestra los archivos, algunos de los cuales se marcan como de tipo b (para block) o de tipo c (para character). Estos dispositivos tienen un par asociado de números que identifican el dispositivo al sistema.
ls -l /dev
total 0
crw-r--r--. 1 root root 10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root 240 Sep 20 07:37 block
drwxr-xr-x. 2 root root 100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root 60 Nov 4 2019 bus
lrwxrwxrwx. 1 root root 3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root 2720 Sep 20 07:37 char
crw-------. 1 root root 5, 1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root 11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Nov 4 2019 cpu
crw-------. 1 root root 10, 62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Aug 20 08:36 disk
brw-rw----. 1 root disk 253, 0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk 253, 1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk 253, 2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root 13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root 1, 7 Aug 20 08:36 full
crw-rw-rw-. 1 root root 10, 229 Aug 20 08:36 fuse
crw-------. 1 root root 10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root 0 Aug 20 08:36 hugepages
crw-------. 1 root root 10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root 12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root 220 Aug 20 08:36 input
crw-r--r--. 1 root root 1, 11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root 28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk 7, 0 Sep 23 01:28 loop0
crw-rw----. 1 root disk 10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root 120 Aug 20 08:36 mapper
crw-------. 1 root root 10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem 1, 1 Aug 20 08:36 mem
crw-------. 1 root root 10, 59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root 40 Nov 4 2019 mqueue
drwxr-xr-x. 2 root root 60 Aug 20 08:36 net
crw-------. 1 root root 10, 61 Aug 20 08:36 network_latency
crw-------. 1 root root 10, 60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root 1, 3 Aug 20 08:36 null
crw-------. 1 root root 10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root 100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem 1, 4 Aug 20 08:36 port
crw-------. 1 root root 108, 0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty 5, 2 Oct 7 08:10 ptmx
drwxr-xr-x. 2 root root 0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root 1, 8 Aug 20 08:36 random
drwxr-xr-x. 2 root root 60 Nov 4 2019 raw
lrwxrwxrwx. 1 root root 4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root 251, 0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk 8, 0 Aug 20 08:36 sda
brw-rw----. 1 root disk 8, 1 Aug 20 08:36 sda1
brw-rw----. 1 root disk 8, 2 Aug 20 08:36 sda2
brw-rw----. 1 root disk 8, 16 Aug 20 08:36 sdb
brw-rw----. 1 root disk 8, 17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom 21, 0 Aug 20 08:36 sg0
Dispositivos de bloque
Los dispositivos de bloque permiten el acceso aleatorio a los datos, buscan medios para los datos y, por lo general, almacenan en buffer los datos mientras se escriben o leen. Algunos ejemplos de dispositivos de bloques son discos duros, unidades de CD-ROM, memoria flash y otros dispositivos de memoria direccionables.
Dispositivos de caracteres
Los dispositivos de caracteres permiten la transmisión de datos desde o hacia un dispositivo. Normalmente, los datos no se almacenan en buffer ni se otorga acceso aleatorio a los datos de un dispositivo. El núcleo escribe datos o lee datos de un dispositivo de caracteres de 1 byte a la vez. Entre los ejemplos de dispositivos de caracteres se incluyen teclados, ratones, terminales, pseudoterminales y unidades de cinta. tty0 y tty1 son archivos de dispositivos de caracteres que corresponden a dispositivos de terminal para que los usuarios puedan iniciar sesión desde terminales serie o emuladores de terminal.
Dispositivos de caracteres pseudoterminales
Los dispositivos secundarios pseudoterminales emulan dispositivos terminales reales para que puedan interactuar con el software. Por ejemplo, un usuario puede iniciar sesión en un dispositivo terminal, como /dev/tty1, que luego utiliza el dispositivo primario pseudoterminal, /dev/pts/ptmx, para interactuar con un dispositivo pseudoterminal subyacente. Los archivos de dispositivos de caracteres para dispositivos secundarios y principales pseudoterminales se encuentran en el directorio /dev/pts, como se muestra en el siguiente ejemplo:
ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
Algunas entradas de dispositivo, como stdin para la entrada estándar, se enlazan simbólicamente mediante el subdirectorio self del sistema de archivos proc. El archivo de dispositivo pseudoterminal al que apuntan depende del contexto del proceso.
ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/2 -> /dev/pts/0
Dispositivos de caracteres nulos, aleatorios, urandom y cero
Los dispositivos de caracteres, como null, random, urandom y zero, son ejemplos de pseudodispositivos que proporcionan acceso a la funcionalidad virtual implementada en el software en lugar de a hardware físico.
/dev/null es un sumidero de datos. Los datos que escribe en /dev/null desaparecen efectivamente, pero la operación de escritura se realiza correctamente. La lectura de /dev/null devuelve EOF (final de archivo).
/dev/zero es un origen de datos de un número ilimitado de bytes de 0 valores.
/dev/random y /dev/urandom son orígenes de datos de flujos de bytes pseudoaleatorios. Para mantener una salida de alta entropía, /dev/random bloquea si su pool de entropía no contiene suficientes bits de ruido. /dev/urandom no bloquea y, por lo tanto, la entropía de su salida puede no ser tan alta como la de /dev/random. Sin embargo, ni /dev/random ni /dev/urandom se consideran lo suficientemente aleatorios para fines de criptografía segura, como el cifrado de grado militar.
Puede averiguar el tamaño del pool de entropía y el valor de entropía para /dev/random desde archivos virtuales en /proc/sys/kernel/random:
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
Para obtener más información, consulte las páginas del manual null(4), pts(4) y random(4).