Правила UDEV, переменная “ИМЕНИ” не работа

Я записал простое правило udev помочь мне понять понятие

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

Часть символьной ссылки UDEV управляет работами (она была прокомментирована), но Заглавная роль правила UDEV не работает. Я не уверен, что я сделал неправильно?

Моя вторая часть вопроса, что символьная ссылка, как предполагается, делает, когда я создал его? Я понимаю, что это указывает на файл устройств, но это довольно бесполезно. Я хотел бы, чтобы это указало на точку монтирования, таким образом, я могу использовать это в качестве ярлыка для вхождения в USB, какие-либо идеи о том, как я могу сделать это?

2
задан 29 May 2017 в 19:48

2 ответа

Вы не можете переименовать узел устройства путем присвоения эти NAME ключ udev правила. По крайней мере, не в systemd udev. Только имя сетевого устройства может измениться. Из 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.

Любая udev символьная ссылка для устройства не является особенной в нем сам. Это - просто символьная ссылка файловой системы на узел устройства. Однако пример полезного использования udev правил символьной ссылки - то, что, потому что имена устройств зависят от порядка, в котором ядро обнаруживают устройства, имя устройства, на котором находится определенная файловая система, непредсказуемо. Когда-то карта флэш-памяти может получить имя устройства /dev/sdf, и в другом /dev/sdg. Правила Udev обычно устанавливаются, который добавляет, что предсказуемые имена символьной ссылки, как он сделан на моем ноутбуке Ubuntu в /dev/disk/by-uuid/, где uuid файловых систем на диске являются символьными ссылками, указывающими на имя устройства ядра.

Что касается Вашего последнего вопроса, у Вас не может быть udev точки символьной ссылки ни к чему кроме узла устройства, таким образом, у Вас не может быть его, указывают на точку монтирования:

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

Для достижения, что Вы хотите сделать можно ли дать файловой системе маркировку и иметь ли программу, которую Вы используете для монтирования файловых систем (udisks2?) используют маркировку от имени точки монтирования.

3
ответ дан 2 December 2019 в 02:46

Как решить проблему не знания названий USB-устройств, когда несколько USB-устройств включаются в том же компьютере? Самый легкий путь использует имена устройств от/dev папки. После включения USB-адаптеров это автоматически генерирует последовательное название его, которое можно найти его под/dev/serial/by-id показанным как ниже

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

QSB_81658 будет eventurally уникальное имя для того USB-устройства.

Я пытался записать правила dev, который был избыточен, потому что каждое устройство имело свое собственное постоянное имя как показано выше. Я также столкнулся с некоторыми проблемами такой как тогда, когда я применял правила dev.

Запись dev управляет для присвоения имен людей. Как мы знаем, каждый QSB-адаптер имеет свой собственный порядковый номер, который можно найти на передней части черного адаптера. Для моего случая у меня есть два QSB0-адаптера. У каждого есть порядковый номер 81 830, другой имеет порядковый номер 81 658. Я буду использовать этот атрибут ({последовательный} ATTRS) для присвоения имен к этому два адаптера.

Во-первых, выполненный udevadm, чтобы взглянуть на детали USB-устройств

$ udevadm информация-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==""

Затем Вы будете видеть одну строку ниже от печатных результатов.

            ATTRS{serial}=="81830"

Перейдите к каталогу/etc/udev/rules.d/

Добавьте 990-usdigital-qsbadapter.rules при помощи команды

  sudo nano 990-usdigital-qsbadapter.rules

Затем поместите followings в файл

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

протестируйте свои правила, можно работать

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

Из-за проблем разрешения, я не мог изменить NAME.Instead, я использую СИМВОЛЬНУЮ ССЫЛКУ.

(Правила UDEV, "НАЗОВИТЕ" переменную, не работающую), Вы не можете переименовать узел устройства путем присвоения ключу ИМЕНИ udev правил. По крайней мере, не в systemd udev. Только имя сетевого устройства может измениться. Из 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.

Так изменитесь, содержание файла правил в файл правила #This используется для присвоения названий qsb адаптера от USdigital

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

Нажмите изображение ниже для наблюдения результата. Результаты печати

0
ответ дан 2 December 2019 в 02:46

Другие вопросы по тегам:

Похожие вопросы: