regras UDEV, variável "NAME" não funciona

2

Eu escrevi uma regra do udev simples para me ajudar a entender o conceito

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

A parte do link simbólico da regra UDEV funciona (está comentado), mas a parte Nome da regra UDEV não funciona. Não tenho certeza do que fiz de errado?

Minha segunda parte da pergunta é: qual é o link simbólico que deve fazer quando eu a criei? Eu entendo que ele aponta para o arquivo do dispositivo, mas isso é meio inútil. Eu gostaria que apontasse para o ponto de montagem para que eu pudesse usar isso como um atalho para entrar no USB, alguma idéia de como eu posso fazer isso?

    
por Bad programmer 29.05.2017 / 18:48

2 respostas

2

Você não pode renomear um nó de dispositivo atribuindo à chave NAME em regras do udev. Pelo menos não no systemd udev. Apenas um nome de dispositivo de rede pode ser alterado. Do manual do 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.

Qualquer link simbólico do udev para um dispositivo não é especial. É apenas um link simbólico do sistema de arquivos para o nó do dispositivo. No entanto, um exemplo de uso útil das regras do symink do udev é que, como os nomes dos dispositivos dependem da ordem em que o kernel descobre os dispositivos, o nome do dispositivo no qual um sistema de arquivos específico reside é imprevisível. De uma só vez, um pen drive pode obter o nome do dispositivo /dev/sdf e em outro /dev/sdg . As regras do Udev geralmente são instaladas, o que adiciona nomes de links simbólicos previsíveis, como é feito no meu laptop Ubuntu em /dev/disk/by-uuid/ onde o uuid dos sistemas de arquivos no disco são links simbólicos apontando para o nome do dispositivo do kernel.

Quanto à sua última pergunta, você não pode ter um link simbólico do udev para nada além de um nó de dispositivo, portanto, não é possível apontar para um ponto de montagem:

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

Para conseguir o que você quer fazer, você pode dar ao sistema de arquivos um rótulo e ter o programa que você usa para montar seus sistemas de arquivos (udisks2?) usando o rótulo no nome do ponto de montagem.

    
por Tom Bjerck 05.06.2017 / 01:04
0

Como resolver o problema de não saber os nomes dos dispositivos USB quando vários dispositivos USB estão conectados no mesmo computador? A maneira mais fácil é usar os nomes dos dispositivos na pasta / dev. Depois de conectar os adaptadores USB, ele irá gerar automaticamente um nome de série para ele, que pode ser encontrado sob o / dev / serial / by-id mostrado abaixo

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

QSB_81658 será um nome único para esse dispositivo USB.

Eu tentei escrever regras dev que eram redundantes, porque cada dispositivo tinha seu próprio nome constante como mostrado acima. Eu também me deparei com alguns problemas, como quando eu estava aplicando regras dev.

Escrevendo regras de desenvolvimento para designar nomes para indivíduos. Como sabemos, cada adaptador QSB possui seu próprio número de série, que você pode encontrar na parte frontal do adaptador preto. Para o meu caso, eu tenho dois adaptadores QSB0. Um tem o número de série de 81830, outro tem o número de série de 81658. Usarei esse atributo (ATTRS {serial}) para atribuir nomes a esses dois adpaters.

Primeiro, execute o udevadm para dar uma olhada nos detalhes dos dispositivos usb

$ udevadm info -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==""

Em seguida, você verá uma linha abaixo dos resultados impressos.

            ATTRS{serial}=="81830"

Vá para o diretório /etc/udev/rules.d /

Adicione 990-usdigital-qsbadapter.rules usando o comando

  sudo nano 990-usdigital-qsbadapter.rules

Em seguida, coloque os seguintes no arquivo

  #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"

teste suas regras, você pode executar

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

Devido a problemas de permissão, não pude alterar NAME. Em vez disso, uso o SYMLINK.

( Regras UDEV, variável "NAME" não funciona ) é possível renomear um nó de dispositivo atribuindo à chave NAME nas regras do udev. Pelo menos não no systemd udev. Apenas um nome de dispositivo de rede pode ser alterado. Do manual do 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.

Portanto, altere o conteúdo do arquivo de regras para # Este arquivo de regras é usado para atribuir nomes ao adaptador qsb da USdigital

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

Por favor, clique na imagem abaixo para ver o resultado. Imprimir resultados

    
por Michael M 06.07.2018 / 05:38