概念を理解するのに役立つ簡単なudevルールを作成しました
#SUBSYSTEM=="block", ATTR{size}=="3913727", SYMLINK="AlphaUSB"
SUBSYSTEM=="block", ATTR{size}=="3913727", NAME="HelloUSB"
UDEVルールのsymlink部分は機能します(コメント化されています)が、UDEVルールのName部分は機能しません。何が間違っていたのかわかりませんか?
質問の2番目の部分は、シンボリックリンクを作成したときに何をすべきかということです。デバイスファイルを指していることは理解していますが、それは一種の役に立たないものです。マウントポイントを指すようにしたいので、USBにアクセスするためのショートカットとしてそれを使用できます。
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?)のマウントに使用するプログラムに、マウントポイントの名前にラベルを使用させます。
同じコンピューターに複数の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"
結果を確認するには、下の写真をクリックしてください。 結果の印刷