내 운영 체제: Raspbian Stretch Lite
너무 길어요 박사님;
- 동일한 USB 장치가 2개 있습니다.
- 주소가 혼동되지 않도록 하고 싶습니다.
- 내 생각은 주소를 특정 USB 포트에 바인딩하는 것입니다. 포트를 "희생"할 수 있나요?
- 제가 리눅스를 처음 접해서 무엇을 해야할지 모르겠습니다. 내가 아는 한, 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포트로 했어요