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

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

概念を理解するために簡単なudevルールを書きました

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

UDEV ルールのシンボリックリンク部分は機能しますが (コメントアウトされています)、UDEV ルールの Name 部分は機能しません。何が間違っているのかわかりません。

2 番目の質問は、シンボリック リンクを作成したら、そのシンボリック リンクは何をすべきかということです。デバイス ファイルを指すことは理解していますが、あまり役に立ちません。マウント ポイントを指して、USB にアクセスするためのショートカットとして使用できるようにしたいのですが、その方法について何かアイデアはありますか。

答え1

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。通常、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?) でマウント ポイントの名前にそのラベルを使用するようにします。

答え2

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

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

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

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

個々のアダプタに名前を割り当てるための開発ルールを記述します。ご存知のとおり、すべての QSB アダプタには独自のシリアル番号があり、黒いアダプタの前面に記載されています。私の場合、QSB0 アダプタが 2 つあります。1 つはシリアル番号 81830、もう 1 つはシリアル番号 81658 です。この属性 (ATTRS{serial}) を使用して、この 2 つのアダプタに名前を割り当てます。

まず、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==""

すると、印刷された結果から 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 --reload-rules
  udevadm test /dev/serial/by-id/usb-US_Digital_USB__-__QSB_81658-if00-port0

権限の問題により、NAME を変更できませんでした。代わりに SYMLINK を使用します。

UDEV ルール、「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.

ルールファイルの内容を#このルールファイルはUSdigitalのqsbアダプタの名前を割り当てるために使用されますに変更します

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

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

関連情報