일관된 Linux 장치 열거


13

Linux 박스에는 항상로 식별되는 USB-> 직렬 장치가 /dev/ttyACM0있습니다. 그래서 신청서를 작성했으며 어제까지 모든 것이 잘 작동했습니다. 그러나 갑자기 (예, 원격 프레젠테이션 중에 ...) 장치가 작동을 멈췄습니다. 빠른 조사 후 연결이로 변경되었음을 발견했습니다 /dev/ttyACM1. 그것은 적시에 조금 있었지만 지금은 문제가 있습니다. 내 장치를 명확하게 식별하는 방법은 무엇입니까? 예를 들어, 스토리지 드라이브 /dev/sd**는 변경 되었지만 UUID를 사용하여 초기화 할 수 있습니다 . 시리얼 장치를위한 방법이 있습니까?

이제 바보 같은 해결 방법을 사용합니다.

for(int i = 0; i < 10; i ++)
{
    m_port = std::string("/dev/ttyACM") + (char)('0' + i);
    m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
}

우리가 사용하는 장치에 대한 링크 .

답변:


19

우리는 USB 장치를 말하고 있고 udev가 있다고 가정하고 udev 규칙을 설정할 수 있습니다.

나는 추측합니다. 이것은 단지 거친 추측입니다. 누군가 또는 무언가가 장치의 플러그를 뽑거나 제거했다가 다시 연결하거나 장치를 다시 추가했습니다.

먼저 공급 업체 및 제품 ID가 필요합니다.

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC

다음으로 일련 번호가 필요합니다 (여러 개가있는 경우).

# udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1
    ATTRS{serial}=="A6008isP"

이제 udev 규칙을 만들어 봅시다 :

UDEV 규칙은 일반적으로의 여러 파일에 흩어져 있습니다 /etc/udev/rules.d. 라는 새 파일을 99-usb-serial.rules만들고 거기에 다음 줄을 넣으십시오. 각기 다른 일련 번호를 가진 세 개의 장치가 있습니다.

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"

ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1

일련 번호를 원하지 않으면 동일한 칩을 가진 공급 업체의 모든 장치가 동일한 심볼릭 링크를 얻습니다. 주어진 시간에 하나만 연결할 수 있습니다.

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="MySerialDevice"

여기에서 찍은


3
최근 Linux 배포판을 사용하는 경우 장치가 이미로 자동 생성됩니다 /dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. 이것은 사용자 정의 udev 규칙이 없으면 충분할 수 있습니다.
Josef는 Reinstate Monica

1
불행히도, 이름이없는 많은 장치에는 모두 일련 번호 "0123456789abcdef"가 있습니다. 그것이 흥미로운 곳입니다.
mosvy

@mosvy는 일련 번호를 변경할 수 없습니까?
OganM

@OganM 장치가 루팅되면 변경 될 수 있습니다 ...
mosvy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.