Sparkfun FTDI 칩과 Arduino Uno에 연결된 Neato XV-* LiDAR 장치가 있습니다. 예측할 수 없을 정도로 할당되지 않은 /dev/ttyUSB0
합계 로 나타납니다 /dev/ttyUSB1
.
그래서 나는 이렇게 썼다 /etc/udev/rules.d/80-arduinouno.rules
:
SUBSYSTEM=="tty",
ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86",
MODE="0666",
OWNER="pi", GROUP="pi",
SYMLINK+="arduinouno"
... 그리고 /etc/udev/rules.d/90-neatolidar.rules
:
SUBSYSTEM=="tty", ENV(ID_SERIAL_SHORT)=="AL01OTZS",
ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", ATTRS{serial}=="AL01OTZS",
MODE="0666", OWNER="pi", GROUP="pi",
SYMLINK+="neatolidar"
idProduct
idVendor
첫 번째 줄에서 가져옴
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idProduct
그리고
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idVendor
출력을 각각 lsusb
. IS_SERIAL_SHORT
출력에서 가져옵니다.
udevadm info -q all -n /dev/ttyUSB0 | grep ID_SERIAL
또는
udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep {serial}
그러나 이 명령은 FTDI/LiDAR에서 작동하지만 Arduino에서만 제공되고 ID_SERIAL
.ID_SERIAL_SHORT
sudo service udev restart
모니터링하는 동안 장치를 연결하고 분리하려고 하면 마지막 으로 연결한 장치와 두 장치 모두 에 대해 심볼릭 링크가 나타나는 것을 watch 'ls -lah /dev | grep ">"'
볼 수 있습니다 . 즉, 지금까지 나는 과 를 보았습니다 . 하지만 플러그를 뽑았다가 다시 연결하면 둘 다 해당 상태로 전환됩니다.arduinouno
neatolidar
ttyUSB*
arduinouno -> ttyUSB1
neatolidar -> ttyUSB1
ttyUSB0
내 udev 규칙이 이 두 장치를 구별하고 올바른 장치가 감지된 경우에만 실행되도록 하려면 어떻게 해야 합니까?
중요한 경우 이는 Raspbian Jessie를 실행하는 Raspberry Pi 3에 있습니다. Arduino는 RPi에 직접 연결되지만FTDI저렴한 노란색에 연결EagleTec 4포트 USB 허브.
답변1
제 평판은 댓글을 남길 만큼 높지 않은 것 같습니다.
또한 다음 bash 스크립트를 사용하여 udev 규칙을 다시 로드하고 다시 트리거하므로 장치를 분리했다가 다시 연결할 필요도 없습니다.
#!/bin/bash
sudo udevadm control --reload-rules
sudo udevadm trigger
답변2
실행 sudo udevadm control --log-priority=info
하고 출력을 관찰 한 후 tail -f /var/log/syslog
몇 가지 오류를 발견했습니다.
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 1,starting at character 17 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 2,starting at character 50 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 3,starting at character 12 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 4,starting at character 23 ('\n')
그리고
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: unknown key 'ENV(ID_SERIAL_SHORT)' in /etc/udev/rules.d/90-neatolidar.rules:1
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid rule '/etc/udev/rules.d/90-neatolidar.rules:1'
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 2,starting at character 77 ('\n') Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 3,starting at character 36 ('\n')
ENV(ID_SERIAL_SHORT)
(1) 내 규칙이 작동하지 않고 (2) 개행 문자가 없어야 한다는 결론이 나옵니다 . 그래서 .rules 파일을 다음 줄로 변경했습니다.
/etc/udev/rules.d/80-arduinouno.rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="arduinouno"
그리고 /etc/udev/rules.d/90-neatolidar.rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", ATTRS{serial}=="AL01OTZS", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="neatolidar"
이는 재부팅 후에(또는 그냥 sudo service udev restart
및/또는 ) 작동하는 것 같습니다.sudo udevadm control --reload