tty. * 포트가 아닌 장치 ID로 USB 직렬 포트에 액세스하는 방법이 있습니까? ID로 직렬 포트를

리눅스에서 USB 직렬 장치를 직렬 포트에 두 개의 별칭을 만듭니다
/dev/tty*/dev/serial/by-id/<my_usb_device_id>

OSX에서 USB 장치 ID로 직렬 포트를 식별하는 방법이 있습니까? 시스템 정보보기 및 사용 모두에서 ioreg -p IOUSBID를 볼 수 있지만 해당 ID를 사용하여 연결하는 데 더 가깝지는 않습니다.

우리는 여러 하드웨어를 개발하고 있으며 다른 장치를 연결할 때마다 테스트 소프트웨어의 직렬 포트 구성을 확인해야합니다. OSX의 경우 tty.*포트 이름이 컴퓨터의 포트에 따라 다르기 때문에 장치에 없습니다. 리눅스를 실행하는 사람들은 행복하게 /dev/serial/by-id/<my_usb_device_id>다른 장치를 자동으로 구별하기 위해 포트를 사용하고 있습니다.



답변

내가 가지고있는 FTDI 브리지의 경우 일련 번호가 이미 장치 이름에 나타납니다 : Linux 및 MacOS /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0에서 (일부에 해당)으로 나타납니다 . (참조 /programming//a/8632603/4896937을 사이의 차이 와 .)/dev/ttyUSBx/dev/cu.usbserial-DA00AG57/dev/tty.usbserial-DA00AG57tty.*cu.*

다작 내가 가진 해소를 위해 불행하게도, 당신과 같은 문제가 계속 적용 장치로 나타나는 /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(일련 번호를 포함하지 않는)은 단순히 /dev/cu.usbserial/dev/tty.usbserial맥 OS에 (심지어 시스템 정보보기 그것을 위해 일련 번호를 제공합니다). 내가 두 번째 플러그를 꽂으면 어떻게 될지 누가 알 겠어요.

공급 업체에 독립적 인 더 일반적인 답변이있을 수 있지만 일부 장치는 일련 번호를보고하지 않을 수 있습니다.


답변

실제로을 사용하여 장치 ID / 일련 번호에서 직렬 포트 이름으로의 매핑을 찾을 수 있어야합니다 ioreg. 이 명령을 시도하십시오 :

ioreg -r -c IOUSBHostDevice -l

모든 USB 호스트 장치를 인쇄하고 각 장치의 하위 트리에서 모든 속성을 인쇄합니다. ID 또는 일련 번호를 기반으로 최상위 레벨에서 장치를 찾을 수 있어야합니다. 일단 그것을 찾으면 하위 트리를 스캔하고 결국 class의 객체를 찾을 수 있어야합니다 IOSerialBSDClient. 여기에는 원하는 속성이 포함됩니다 IODialinDevice.

프로그래밍 방식으로이 작업을 수행 -a하려면 ioreg명령에 옵션을 추가 하면 위 출력의 plist 버전이 출력됩니다. 그런 다음와 같은 라이브러리로이를 구문 분석 할 수 plistlib있습니다.

전체 ioreg출력을 읽기가 약간 어려우 므로 IORegistryExplorer 앱을 사용하여이를 시각화하는 것이 도움이 될 수 있습니다 ! 이것은 XCode의 “Hardware IO Tools”패키지로 제공되며, Apple 개발자 사이트에서 다운로드를 검색하여 찾을 수 있습니다 . 내 장치의 모습은 다음과 같습니다.