GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿Sysfs y Devtmpfs?

Ulrich Dangel explica muy bien la diferencia entre devtmpfs y udev.

¿Qué pasa con sysfs?

Entiendo que el kernel usa sysfs para exportar nodos de dispositivos al espacio del usuario para que los use udev. Entonces, ¿devtmpfs y sysfs son lo mismo? En caso afirmativo, ¿por qué usan nombres diferentes? Si no, ¿cuál es la diferencia real entre sysfs y devtmpfs?

Respuesta aceptada:

el kernel usa sysfs para exportar nodos de dispositivos al espacio del usuario para que los use udev

No. Sysfs no contiene nodos de dispositivos. Sysfs contiene principalmente archivos que brindan información sobre los dispositivos, así como algunos archivos que permiten que los procesos controlen cómo funcionan los dispositivos. Pero en su mayor parte, los dispositivos no se pueden usar a través de lo que proporciona sysfs.

Tomemos un disco duro, por ejemplo. Hay un directorio para ello en algún lugar bajo /sys/devices , con una ruta que depende de cómo esté conectado a la computadora (por ejemplo, /sys/devices/pci0000:00/… para un disco conectado a un controlador que está conectado al bus PCI principal de la computadora). En ese directorio, puede encontrar información diversa, como su tamaño, si es extraíble, su estado de energía, etc. También hay subdirectorios para particiones. Pero no hay nada allí que proporcione acceso al contenido del disco. En otra parte de /sys , hay enlaces simbólicos al directorio correspondiente a ese disco:en /sys/block , en /sys/class/block , etc. Pero aún nada para acceder al contenido del disco.

En /dev , la entrada para el disco es un archivo especial: un dispositivo de bloque. Este archivo permite que los procesos lean y escriban el contenido del disco. (Aunque para un disco eso no suele suceder; en su lugar, se monta el contenido del disco, o de una partición, por lo que el kernel accede al dispositivo, los procesos no).

Los archivos de dispositivo permiten realizar algunas operaciones además de leer y escribir contenido a través de ioctl. Sería posible proporcionar toda la información y las interfaces de control que proporciona sysfs a través de ioctl en el archivo del dispositivo. Sin embargo, esto sería menos conveniente por varias razones:

  • Con archivos separados en /sys , los permisos se pueden establecer de forma detallada. Con un único archivo por dispositivo en /dev , es todo o nada.
  • Las aplicaciones pueden leer y escribir fácilmente archivos separados. Puedes simplemente usar cat o echo . Con ioctl, es mucho más difícil:no hay interfaz de shell, a menudo no hay interfaz en otros lenguajes de alto nivel.
  • Con ioctl, el comando debe codificarse en un número en lugar de un nombre, y el formato de los argumentos debe definirse a nivel binario. El uso de nombres y formatos de texto simples facilita la escritura de software.

Yendo en la otra dirección, sería posible proporcionar acceso al contenido del dispositivo a través de un archivo en sysfs. Pero esto requeriría trabajo adicional en el kernel:sysfs está diseñado principalmente para servir archivos pequeños y enlaces simbólicos, y sin el ioctl soporte que esperan las aplicaciones existentes. No creo que haya un beneficio significativo en la expansión de sysfs para admitir los tipos de dispositivos existentes, por lo tanto, la existencia continua de archivos de dispositivos.

Relacionado:Linux:¿cómo saber qué discos duros hay en el sistema?

Sysfs se completa automáticamente con el kernel, lo que refleja los dispositivos realmente disponibles en tiempo real. El significado de un archivo en sysfs proviene de su ruta, que es elegida por el controlador que proporciona ese archivo. /dev funciona de manera diferente:el significado de un archivo proviene del tipo de archivo del dispositivo (bloque o carácter) y sus números mayores y menores (eso es lo que ls -l listas en lugar del tamaño de archivo para un dispositivo). Tradicionalmente, /dev era estático, con archivos de dispositivos creados durante la instalación del sistema; pero eso no funciona tan bien cuando los dispositivos se pueden conectar en caliente, de ahí el deseo de un /dev dinámico que refleja los dispositivos conectados en tiempo real.

Linux ha pasado por varias iteraciones de un /dev dinámico . Linux 2.4 tiene devfs, donde el kernel creaba entradas automáticamente para reflejar los dispositivos conectados. Pero eso no fue tan bueno, porque codificaba las políticas de permisos y nombres de dispositivos en el kernel, por lo que fue reemplazado por el programa de usuario udev para administrar políticas, y /dev en un sistema de archivos tmpfs simple (un sistema de archivos en memoria sin un significado especial para el kernel). Y luego devfs hizo una reaparición parcial, con devtmpfs, que es una instancia de tmpfs donde el kernel crea automáticamente las entradas para los dispositivos disponibles, pero udev hace toda la administración que quiere además de eso.


Linux
  1. Comandos de Linux:trabajos, bg y fg

  2. ¿Cómo obtener información del proveedor y del producto USB mediante programación en Linux?

  3. Desconecte y vuelva a conectar ttyUSB0 mediante programación en Linux

  4. uso de comodines de linux en cp y mv

  5. Cintas de Linux, ¿qué es l a y m al final de los dispositivos de cinta en desarrollo?

Todo es archivo en Linux – Parte 1

Kernel de Linux y sus funciones

Instalar y configurar Ansible en Linux

Instalación y configuración de Jenkins en Linux

Cómo detectar y administrar dispositivos en Linux

Descripción general de RAMFS y TMPFS en Linux