私のオペレーティングシステム:Raspbian Stretch Lite
長すぎる博士。
- 同じUSBデバイスが2つあります。
- 住所が混同されないようにしたいです。
- 私の考えは、アドレスを特定のUSBポートにバインドすることです。ポートを「犠牲」にすることはできますか?
- 私はLinuxに初めて触れて何をすべきかわかりません。私が知る限り、udevはポートではなくIDでデバイスを区別します(他のメーカー、モデルなど)。
- 他の推奨方法はありますか?
長いバージョン:
だから、同じメーカーのUART-USBコンバータがあるので、udevなどで同じIDを持っています。両方のデバイスが混乱しないようにしたいと思います。たとえば、/ dev / ttyUSB0は常に私が望む特定のハードウェアを指します(例:内部。両方のデバイスがドアに分割されているため、外部と内部を混同しないことが重要です)。
これを実装する方法がわかりません。私の考えは、デバイスが特定のポートに接続されているときに常にそのデバイスにttyUSB0アドレスを提供するように特定のポートをバインドすることです。これは可能ですか?私はLinuxに初めてアクセスし、udevルールがあることを知っています。しかし、私が知っている限り、ポートではなくIDでのみデバイスをバインドします。それとも、udevを使用してこれを行う他の推奨方法はありますか?
これは私のudevadm
デバイスです:
looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="cp210x"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0':
KERNELS=="3-2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="cp210x"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bNumEndpoints}=="02"
ATTRS{interface}=="CP2102 USB to UART Bridge Controller"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2':
KERNELS=="3-2"
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}=="64"
ATTRS{bMaxPower}=="100mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="3"
ATTRS{configuration}==""
ATTRS{devnum}=="57"
ATTRS{devpath}=="2"
ATTRS{idProduct}=="ea60"
ATTRS{idVendor}=="10c4"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Silicon Labs"
ATTRS{maxchild}=="0"
ATTRS{product}=="CP2102 USB to UART Bridge Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{serial}=="0001"
ATTRS{speed}=="12"
ATTRS{urbnum}=="1909"
ATTRS{version}==" 1.10"
注:ポートを特定のシリアルアドレスにバインドすると、そのポートを他のデバイスに使用できないことを意味しても大丈夫です。
答え1
udev
パスに基づいてパス名を変更しようとする代わりに、およびに格納されている値を直接使用できます。/dev/serial/by-path
/dev/serial/by-id
これはttyUSB
デバイスへのシンボリックリンクであり、デバイスが検出されるたびに更新されます。
たとえば、私のコンピュータでは次のようになります。
% ls -l /dev/serial/by-path/
total 0
lrwxrwxrwx 1 root root 13 Dec 12 19:23 pci-0000:00:1a.0-usb-0:1.5.1:1.0-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Dec 12 19:23 pci-0000:00:1a.0-usb-0:1.5.1:1.1-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Dec 9 10:56 pci-0000:00:1a.0-usb-0:1.5.2:1.0-port0 -> ../../ttyUSB4
lrwxrwxrwx 1 root root 13 Dec 12 19:23 pci-0000:00:1a.0-usb-0:1.5.4:1.0-port0 -> ../../ttyUSB2
lrwxrwxrwx 1 root root 13 Dec 12 19:23 pci-0000:00:1a.0-usb-0:1.5.4:1.1-port0 -> ../../ttyUSB3
lrwxrwxrwx 1 root root 13 Dec 12 19:24 pci-0000:00:1a.0-usb-0:1.6:1.0-port0 -> ../../ttyUSB5
% ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Dec 9 10:56 usb-1a86_USB2.0-Ser_-if00-port0 -> ../../ttyUSB4
lrwxrwxrwx 1 root root 13 Dec 12 19:24 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB5
lrwxrwxrwx 1 root root 13 Dec 12 19:23 usb-utek_USB__-__Serial_Cable_FTVW64JR-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Dec 12 19:23 usb-utek_USB__-__Serial_Cable_FTVW64JR-if01-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Dec 12 19:23 usb-utek_USB__-__Serial_Cable_FTWKU6FP-if00-port0 -> ../../ttyUSB2
lrwxrwxrwx 1 root root 13 Dec 12 19:23 usb-utek_USB__-__Serial_Cable_FTWKU6FP-if01-port0 -> ../../ttyUSB3
答え2
努力するhttps://unix.stackexchange.com/a/533464/202850。シリアル番号のない4つの同じカメラがあり、それを識別する必要があります。私はUSBポートにしました。