내장 시스템에서 USB 직렬 장치를 연결하거나 분리 할 때 감지해야하며 tty
이 무엇인지 알고 있어야합니다.C++ USB 직렬 장치 감지 연결/연결 해제
내 시스템은 2.6 Linux 커널에서 실행됩니다.
udev
규칙에 대한 쓰기 권한이 없으므로 요즘 파일 시스템에서이 정보를 얻으려는 시도가있어 /sys/bus/usb/devices
디렉토리의 수정 사항을 찾고 있습니다. 그러나, 나는이 접근 방식에 몇 가지 문제점에 직면 해있다.
USB 포트 (예 : 1-1.3)의 Id BUS
은 무엇이 연결되어 있는지 알고 있습니다. 따라서 연결된 tty
(디렉토리는 /sys/bus/usb/devices/<Id BUS>:1.0/tty/
- 예 : /sys/bus/usb/devices/1-1.3:1.0/tty/ttyACM0
)을 검색합니다. 이렇게하면 /dev/ttyACM0
을 사용하여 내 장치와 통신해야한다는 것을 알고 있습니다. 하지만 때로는이 장치 (/dev/ttyACM0
)가 존재하지 않습니다.
이 정보를 얻을 수있는 더 좋은 방법이 있습니까?
나는 심지어 syslog에서이 정보를 얻으려는 것으로 생각했지만, 이것이 꽤 좋은지는 모르겠다.
편집 :
만 내 시스템이 새로운 장치가 연결되어있는 경우 감지 (과 연결된 tty
이름을 얻는) 즉, USB 버스의 상태 변화를 감지 할 수 있어야하거나 기존, 명확히하기 하나는 뽑혔다.
시스템은 USB 허브를 사용하여 연결되는 USB/직렬 장치를 최대로 N
개까지 모니터링합니다. 정상적인 실행 중에는 새 장치를 연결할 수 있으며 기존 장치를 제거 할 수 있습니다 (또는이 범위 밖의 원격 명령으로 재부팅 할 수 있음). 기기가 재부팅 될 때 이전에 사용 된 것과 다른 tty
(예 : ttyACM0
->ttyACM3
)이 수신 될 수 있습니다. 이는 커널이 현재 무료 인 tty
을 지정했기 때문에 큰 문제입니다.
감사합니다. @ david-grayson, 나는 문제가되는 시나리오에 대한 더 나은 개요를 추가하여 질문을 편집했습니다. lib를 사용하여 설명 된 요구 사항을 충족시킬 수 있습니까? – Valmir
예, 정상적으로 작동합니다. –
임베디드 시스템에는 libudev가 없으므로 mdev 만 있으므로 lib를 사용할 수 없습니다. – Valmir