Reglas UDEV, la variable "NOMBRE" no funciona

Reglas UDEV, la variable "NOMBRE" no funciona

He escrito una regla udev simple para ayudarme a comprender el concepto.

#SUBSYSTEM=="block", ATTR{size}=="3913727", SYMLINK="AlphaUSB"
SUBSYSTEM=="block", ATTR{size}=="3913727", NAME="HelloUSB"

La parte del enlace simbólico de la regla UDEV funciona (ha sido comentada) pero la parte Nombre de la regla UDEV no funciona. ¿No estoy seguro de qué he hecho mal?

Mi segunda parte de la pregunta es, ¿qué se supone que debe hacer el enlace simbólico cuando lo he creado? Entiendo que apunta al archivo del dispositivo, pero eso es algo inútil. Me gustaría que apunte al punto de montaje para poder usarlo como acceso directo para ingresar al USB, ¿alguna idea sobre cómo puedo hacerlo?

Respuesta1

No puede cambiar el nombre de un nodo de dispositivo asignándolo a la NAMEclave en las reglas de udev. Al menos no en systemd udev. Sólo se puede cambiar el nombre de un dispositivo de red. Del manual de udev:

   NAME
       The name to use for a network interface. See
       systemd.link(5) for a higher-level mechanism
       for setting the interface name. The name of a
       device node cannot be changed by udev, only
       additional symlinks can be created.

Cualquier enlace simbólico de udev para un dispositivo no es especial en sí mismo. Es solo un enlace simbólico del sistema de archivos al nodo del dispositivo. Sin embargo, un ejemplo de uso útil de las reglas de enlace simbólico de udev es que debido a que los nombres de los dispositivos dependen del orden en que el kernel descubre los dispositivos, el nombre del dispositivo en el que reside un sistema de archivos específico es impredecible. En un momento una memoria USB puede obtener el nombre del dispositivo /dev/sdfy en otro /dev/sdg. Por lo general, se instalan reglas de Udev que agregan nombres de enlaces simbólicos predecibles, como se hace en mi computadora portátil Ubuntu, donde /dev/disk/by-uuid/el uuid de los sistemas de archivos en el disco son enlaces simbólicos que apuntan al nombre del dispositivo del kernel.

En cuanto a su última pregunta, no puede hacer que un enlace simbólico udev apunte a nada más que a un nodo de dispositivo, por lo que no puede hacer que apunte a un punto de montaje:

   SYMLINK
       The name of a symlink targeting the node. Every
       matching rule adds this value to the list of
       symlinks to be created.

Para lograr lo que desea hacer, puede darle una etiqueta al sistema de archivos y hacer que el programa que usa para montar sus sistemas de archivos (udisks2?) use la etiqueta en el nombre del punto de montaje.

Respuesta2

¿Cómo resolver el problema de no saber los nombres de los dispositivos USB cuando hay varios dispositivos USB conectados a la misma computadora? La forma más sencilla es utilizar los nombres de los dispositivos de la carpeta /dev. Después de conectar los adaptadores USB, generará automáticamente un nombre de serie que puede encontrar en /dev/serial/by-id que se muestra a continuación.

  /dev/serial/by-id/usb-US_Digital_USB__-__QSB_81658-if00-port0

QSB_81658 eventualmente proporcionará un nombre único para ese dispositivo USB.

Intenté escribir reglas de desarrollo que eran redundantes, porque cada dispositivo tenía su propio nombre constante, como se muestra arriba. También encontré algunos problemas, como cuando aplicaba reglas de desarrollo.

Escribir reglas de desarrollo para asignar nombres a individuos. Como sabemos, cada adaptador QSB tiene su propio número de serie, que puede encontrar en la parte frontal del adaptador negro. En mi caso, tengo dos adaptadores QSB0. Uno tiene el número de serie 81830, otro tiene el número de serie 81658. Usaré este atributo (ATTRS{serial}) para asignar nombres a estos dos adaptadores.

Primero, ejecute udevadm para ver los detalles de los dispositivos USB.

$ udevadm información -a -n /dev/ttyUSB0

  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 '':
      KERNEL=="ttyUSB0"
      SUBSYSTEM=="tty"
      DRIVER==""

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/ttyUSB0':
      KERNELS=="ttyUSB0"
      SUBSYSTEMS=="usb-serial"
      DRIVERS=="ftdi_sio"
      ATTRS{latency_timer}=="16"
      ATTRS{port_number}=="0"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0':
      KERNELS=="1-8:1.0"
      SUBSYSTEMS=="usb"
      DRIVERS=="ftdi_sio"
      ATTRS{authorized}=="1"
      ATTRS{bAlternateSetting}==" 0"
      ATTRS{bInterfaceClass}=="ff"
      ATTRS{bInterfaceNumber}=="00"
      ATTRS{bInterfaceProtocol}=="ff"
      ATTRS{bInterfaceSubClass}=="ff"
      ATTRS{bNumEndpoints}=="02"
      ATTRS{interface}=="USB <-> QSB"
      ATTRS{supports_autosuspend}=="1"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8':
      KERNELS=="1-8"
      SUBSYSTEMS=="usb"
      DRIVERS=="usb"
      ATTRS{authorized}=="1"
      ATTRS{avoid_reset_quirk}=="0"
      ATTRS{bConfigurationValue}=="1"
      ATTRS{bDeviceClass}=="00"
      ATTRS{bDeviceProtocol}=="00"
      ATTRS{bDeviceSubClass}=="00"
      ATTRS{bMaxPacketSize0}=="8"
      ATTRS{bMaxPower}=="500mA"
      ATTRS{bNumConfigurations}=="1"
      ATTRS{bNumInterfaces}==" 1"
      ATTRS{bcdDevice}=="0600"
      ATTRS{bmAttributes}=="80"
      ATTRS{busnum}=="1"
      ATTRS{configuration}==""
      ATTRS{devnum}=="5"
      ATTRS{devpath}=="8"
      ATTRS{idProduct}=="6001"
      ATTRS{idVendor}=="0403"
      ATTRS{ltm_capable}=="no"
      ATTRS{manufacturer}=="US Digital"
      ATTRS{maxchild}=="0"
      ATTRS{product}=="USB <-> QSB"
      ATTRS{quirks}=="0x0"
      ATTRS{removable}=="unknown"
      ATTRS{serial}=="81830"
      ATTRS{speed}=="12"
      ATTRS{urbnum}=="72190"
      ATTRS{version}==" 2.00"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1':
      KERNELS=="usb1"
      SUBSYSTEMS=="usb"
      DRIVERS=="usb"
      ATTRS{authorized}=="1"
      ATTRS{authorized_default}=="1"
      ATTRS{avoid_reset_quirk}=="0"
      ATTRS{bConfigurationValue}=="1"
      ATTRS{bDeviceClass}=="09"
      ATTRS{bDeviceProtocol}=="01"
      ATTRS{bDeviceSubClass}=="00"
      ATTRS{bMaxPacketSize0}=="64"
      ATTRS{bMaxPower}=="0mA"
      ATTRS{bNumConfigurations}=="1"
      ATTRS{bNumInterfaces}==" 1"
      ATTRS{bcdDevice}=="0404"
      ATTRS{bmAttributes}=="e0"
      ATTRS{busnum}=="1"
      ATTRS{configuration}==""
      ATTRS{devnum}=="1"
      ATTRS{devpath}=="0"
      ATTRS{idProduct}=="0002"
      ATTRS{idVendor}=="1d6b"
      ATTRS{interface_authorized_default}=="1"
      ATTRS{ltm_capable}=="no"
      ATTRS{manufacturer}=="Linux 4.4.0-128-generic xhci-hcd"
      ATTRS{maxchild}=="16"
      ATTRS{product}=="xHCI Host Controller"
      ATTRS{quirks}=="0x0"
      ATTRS{removable}=="unknown"
      ATTRS{serial}=="0000:00:14.0"
      ATTRS{speed}=="480"
      ATTRS{urbnum}=="129"
      ATTRS{version}==" 2.00"

    looking at parent device '/devices/pci0000:00/0000:00:14.0':
      KERNELS=="0000:00:14.0"
      SUBSYSTEMS=="pci"
      DRIVERS=="xhci_hcd"
      ATTRS{broken_parity_status}=="0"
      ATTRS{class}=="0x0c0330"
      ATTRS{consistent_dma_mask_bits}=="64"
      ATTRS{d3cold_allowed}=="1"
      ATTRS{device}=="0xa12f"
      ATTRS{dma_mask_bits}=="64"
      ATTRS{driver_override}=="(null)"
      ATTRS{enable}=="1"
      ATTRS{irq}=="120"
      ATTRS{local_cpulist}=="0-3"
      ATTRS{local_cpus}=="f"
      ATTRS{msi_bus}=="1"
      ATTRS{numa_node}=="-1"
      ATTRS{subsystem_device}=="0x8694"
      ATTRS{subsystem_vendor}=="0x1043"
      ATTRS{vendor}=="0x8086"

    looking at parent device '/devices/pci0000:00':
      KERNELS=="pci0000:00"
      SUBSYSTEMS==""
      DRIVERS==""

Luego verá una línea debajo de los resultados impresos.

            ATTRS{serial}=="81830"

Vaya al directorio de /etc/udev/rules.d/

Agregue 990-usdigital-qsbadapter.rules usando el comando

  sudo nano 990-usdigital-qsbadapter.rules

Luego coloque lo siguiente en el archivo.

  #This rule file is used to assign names for qsb adapter from USdigital 
  KERNELS=="1-8",SUBSYSTEMS=="usb",ATTRS{serial}=="81830",NAME="qsb81830"
  KERNELS=="1-8",SUBSYSTEMS=="usb",ATTRS{serial}=="81658",NAME="qsb81658"

prueba tus reglas, puedes ejecutar

  udevadm control --reload-rules
  udevadm test /dev/serial/by-id/usb-US_Digital_USB__-__QSB_81658-if00-port0

Debido a problemas de permisos, no pude cambiar NOMBRE. En su lugar, uso SYMLINK.

(Reglas UDEV, la variable "NOMBRE" no funciona) No puede cambiar el nombre de un nodo de dispositivo asignándolo a la clave NOMBRE en las reglas de udev. Al menos no en systemd udev. Sólo se puede cambiar el nombre de un dispositivo de red. Del manual de udev:

  NAME
         The name to use for a network interface. See
         systemd.link(5) for a higher-level mechanism
         for setting the interface name. The name of a
         device node cannot be changed by udev, only
         additional symlinks can be created.

Así que cambie el contenido del archivo de reglas a #Este archivo de reglas se usa para asignar nombres al adaptador qsb de USdigital

  ATTRS{serial}=="81830",SYMLINK+="QSB830"
  ATTRS{serial}=="81658",SYMLINK+="QSB658"

Por favor haga clic en la imagen a continuación para ver el resultado. Imprimir resultados

información relacionada