¿Cuál es la diferencia entre la representación del dispositivo en /dev
y la en /sys/class
?
¿Se prefiere uno sobre el otro? ¿Hay algo que uno ofrece y el otro no?
¿Cuál es la diferencia entre la representación del dispositivo en /dev
y la en /sys/class
?
¿Se prefiere uno sobre el otro? ¿Hay algo que uno ofrece y el otro no?
Respuestas:
Los archivos en /dev
son archivos de dispositivos reales que UDEV crea en tiempo de ejecución. El /sys/class
núcleo exporta el directorio en tiempo de ejecución, exponiendo la jerarquía del hardware sysfs
.
Del tutorial de libudev y Sysfs
extracto
En los sistemas Unix y similares a Unix, se accede a los dispositivos de hardware a través de archivos especiales (también llamados archivos de dispositivo o nodos) ubicados en el directorio / dev. Estos archivos se leen y escriben de la misma forma que los archivos normales, pero en lugar de escribir y leer datos en un disco, se comunican directamente con un controlador de núcleo que luego se comunica con el hardware. Hay muchos recursos en línea que describen / dev archivos con más detalle. Tradicionalmente, estos archivos especiales fueron creados en el momento de la instalación por la distribución, utilizando el comando mknod. En los últimos años, los sistemas Linux comenzaron a usar udev para administrar estos archivos / dev en tiempo de ejecución. Por ejemplo, udev creará nodos cuando se detecten dispositivos y los eliminará cuando se eliminen los dispositivos (incluidos los dispositivos de conexión en caliente en tiempo de ejecución). De esta manera,
otro extracto
Los directorios en Sysfs contienen la jerarquía de dispositivos, ya que están conectados a la computadora. Por ejemplo, en mi computadora, el dispositivo hidraw0 se encuentra debajo de:
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
Según la ruta, el dispositivo está conectado a (aproximadamente, comenzando desde el final) la configuración 1 (: 1.0) del dispositivo conectado al número de puerto 4 del dispositivo 1-5, conectado al controlador USB 1 (usb1), conectado al Bus PCI. Si bien es interesante, esta ruta de directorio no nos hace mucho bien, ya que depende de cómo el hardware está físicamente conectado a la computadora.
Afortunadamente, Sysfs también proporciona una gran cantidad de enlaces simbólicos, para facilitar el acceso a los dispositivos sin tener que saber a qué puertos PCI y USB están conectados. En / sys / class hay un directorio para cada clase diferente de dispositivo.
En general, utiliza reglas /etc/udev/rules.d
para aumentar su sistema. Se pueden construir reglas para ejecutar scripts cuando hay varios hardware presentes.
Una vez que un sistema está activo puede escribir secuencias de comandos para trabajar contra cualquiera /dev
o /sys
, y que realmente se reduce a preferencias personales, pero yo por lo general tratar de trabajar en contra /sys
y hacer uso de herramientas como udevadm
a UDEV consulta para ubicaciones de los diferentes recursos del sistema.
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...