web-dev-qa-db-ja.com

UDEVルール、「NAME」変数が機能しない

概念を理解するのに役立つ簡単なudevルールを作成しました

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

UDEVルールのsymlink部分は機能します(コメント化されています)が、UDEVルールのName部分は機能しません。何が間違っていたのかわかりませんか?

質問の2番目の部分は、シンボリックリンクを作成したときに何をすべきかということです。デバイスファイルを指していることは理解していますが、それは一種の役に立たないものです。マウントポイントを指すようにしたいので、USBにアクセスするためのショートカットとしてそれを使用できます。

2
Bad programmer

UdevルールでNAMEキーに割り当ててデバイスノードの名前を変更することはできません。少なくとも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を取得する場合があります。 Ubuntuラップトップで/dev/disk/by-uuid/で行われるように、通常、予測可能なシンボリックリンク名を追加するUdevルールがインストールされます。ディスク上のファイルシステムの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?)のマウントに使用するプログラムに、マウントポイントの名前にラベルを使用させます。

2
Tom Bjerck

同じコンピューターに複数のUSBデバイスが接続されているときにUSBデバイスの名前がわからないという問題を解決するにはどうすればよいですか?最も簡単な方法は、/ devフォルダーのデバイス名を使用することです。 USBアダプターを接続すると、シリアル名が自動的に生成されます。シリアル名は、次のように/ dev/serial/by-idの下にあります。

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

QSB_81658は、最終的にそのUSBデバイスの一意の名前になります。

上記のように、すべてのデバイスに固有の定数名があるため、冗長なdevルールを記述しようとしました。また、開発ルールを適用していたときなど、いくつかの問題に遭遇しました。

個人に名前を割り当てる開発ルールを作成します。知っているように、すべてのQSBアダプターには独自のシリアル番号があります。シリアル番号は、黒いアダプターの前面にあります。私の場合、2つのQSB0アダプターがあります。 1つは81830のシリアル番号、もう1つは81658のシリアル番号です。この属性(ATTRS {serial})を使用して、この2つのアダプターに名前を割り当てます。

まず、udevadmを実行して、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==""

次に、印刷結果から1行下に表示されます。

            ATTRS{serial}=="81830"

/etc/udev/rules.d/のディレクトリに移動します

コマンドを使用して990-usdigital-qsbadapter.rulesを追加します

  Sudo nano 990-usdigital-qsbadapter.rules

次に、以下をファイルに入れます

  #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を変更できませんでした。代わりにSYMLINKを使用します。

DEVルール、「NAME」変数が機能しない )udevルールでNAMEキーに割り当ててデバイスノードの名前を変更することはできません。少なくとも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ルールファイルに変更して、USdigitalからqsbアダプターの名前を割り当てます。

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

結果を確認するには、下の写真をクリックしてください。 結果の印刷

0
Michael M