내 컴퓨터에 여러 개의 USB 장치가 연결되어 있습니다.
- FT232 기반 USB-UART 변환기:직렬 프로토콜을 사용하여 마이크로컨트롤러와 컴퓨터 간에 데이터를 보내고 받는 데 사용됩니다.
- YDLidar TG15:환경 다이어그램을 그리는 데 사용됩니다.제품 페이지
NUC에서 Lubuntu 22.04 LTS를 실행하고 있습니다.
컴퓨터가 부팅될 때마다 dev/ttyUSB0
cp210x 직렬 변환기를 사용하여 FT232 기반 장치를 YDLidar에 할당할 수 있기를 원합니다. dev/ttyUSB1
내가 원하는 구성은 다음과 같습니다.
$ sudo dmesg | grep tty
[ 0.095479] printk: console [tty0] enabled
[ 6.046918] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
[ 57.282034] usb 1-4: cp210x converter now attached to ttyUSB1
다음과 같은 일부 리소스를 온라인으로 따라갈 수 있었습니다.이것,이것, 그리고이것, 아래와 같이 내 사용 사례에 대한 사용자 지정 규칙을 작성하는 데 도움이 되었습니다.
$ cat /etc/udev/rules.d/34-usb-serial.rules
# Assign FTDI chips to /dev/ttyFTDI
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK="ttyUSB0"
# Assign Silicon Labs UART converters to /dev/ttyUSB1
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK="ttyUSB1"
질문:
udevadm
다시 로드 규칙이 트리거된 후에도 시작 후 주소가 변경되지 않습니다. 나는 사용한다
sudo udevadm control --reload-rules
sudo udevadm trigger
규칙을 다시 로드합니다. 그러면 규칙이 로드되어야 하고, 로드할 수 없으면 불평해야 합니다. 그렇죠? 그러나 이 대체 방법이 작동하지 않으면 오류가 발생하지 않습니다. 단지 cp210x 장치를 로 지정 ttyUSB0
하고 FTDI 장치를 로 지정합니다 ttyUSB1
. 이건 다시 해봐야 sudo dmesg | grep tty
알겠네요 .
- 내가 작성한 udev 규칙을 사용하는 방법적절하게부팅 시 이러한 장치에 적절한 ID를 할당하시겠습니까?
첨부된:이 경우 "적절"하다고 간주되는 것이 모호한 경우에는 이러한 파일을 편집할 때 따르는 "모범 사례"를 가능한 한 밀접하게 따르면서 강력한 방식으로 작동하는 것을 원합니다.
미리 감사드립니다!
답변1
USB 직렬 변환기 장치의 표준 이름과 겹치 SYMLINK="ttyUSB0"
거나 사용하지 못할 수 있습니다 .SYMLINK="ttyUSB1"
현대적인 udev
구현으로는 다음과 같은 일이 불가능합니다.씌우다표준 이름이지만 직접 만들 수 있습니다.추가의심볼릭 링크.
목적에 따라 사용자 정의 장치 노드의 이름을 지정해야 합니다.
# FTDI serial converter for microcontroller
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="ttyUSBmc"
# Silicon Labs serial converter for LIDAR
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="ttyUSBlidar"
이러한 규칙에 따라 직렬 변환기는 실제 장치 이름 /dev/ttyUSB0
과 /dev/ttyUSB1
각 부팅 시 감지되는 순서를 가져오지만 /dev/ttyUSBmc
항상 FTDI 직렬 변환기를 가리키고 /dev/ttyUSBlidar
Silicon Labs 직렬 변환기를 가리키는 심볼릭 링크가 됩니다. .
또한 이러한 udev 규칙을 생성한 후 initramfs 파일을 다시 빌드해야 합니다. USB 직렬 변환기용 드라이버는 실제 루트 파일 시스템이 마운트되기 전 부팅 프로세스 초기에 로드될 수 있습니다.
initramfs를 업데이트하면 가장 오래된 드라이버가 로드될 때에도 추가한 udev 규칙의 복사본이 존재하도록 보장할 수 있습니다.