Чи є спосіб отримати доступ до USB-послідовного порту за допомогою ідентифікатора пристрою, а не через порт tty. *?


17

На USB-послідовних пристроях Linux створено два псевдоніми його послідовного порту:
/dev/tty*і/dev/serial/by-id/<my_usb_device_id>

Чи існує спосіб на OSX визначити послідовний порт за ідентифікатором USB-пристрою? Як у System Profiler, так і за допомогою ioreg -p IOUSBя бачу ідентифікатор, але це не наближає мене до підключення за допомогою цього ідентифікатора.

Ми розробляємо декілька апаратних засобів, і болісно перевірити їх, оскільки кожен раз, коли я підключаю інший пристрій, мені потрібно перевірити конфігурацію послідовного порту тестувального програмного забезпечення, оскільки для OSX tty.*назва порту залежить від порту на моєму комп'ютері, не на пристрої. Хлопці, на яких працює Linux, із задоволенням використовують /dev/serial/by-id/<my_usb_device_id>порт, щоб автоматично розрізняти різні пристрої.

Відповіді:


2

Для мосту FTDI, який у мене є, серійний номер вже відображається в назві пристрою: він відображається як /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(відповідає деяким /dev/ttyUSBx) в Linux, а також як /dev/cu.usbserial-DA00AG57і /dev/tty.usbserial-DA00AG57в macOS. (Див. Https://stackoverflow.com/a/8632603/4896937 щодо різниці між tty.*та cu.*.)

На жаль, для мосту Prolific у мене все ще застосовується така проблема, як ваш /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(наприклад, що не містить серійного номера) пристрій є просто /dev/cu.usbserialі /dev/tty.usbserialна macOS (навіть System Profiler не дає серійний номер для нього). Хто знає, що було б, якби я підключив другий.

Можливо, є більш загальна відповідь, яка не залежить від постачальника, але застережте, що деякі пристрої можуть не повідомити про серійний номер.


Для мене вони виглядають як /dev/tty.usbmodemFD121 та /dev/tty.usbmodemFA131. Кількість безпосередньо залежить від порту USB на моєму ноутбуці. Інформація про систему показує правильний ідентифікатор для пристроїв, встановлених їх прошивкою. Обидві серіали створені процесорами STM32F2 / F4.
Йоган

2

Насправді ви повинні мати можливість знайти відображення від ідентифікатора пристрою / серійного номера до імені послідовного порту, використовуючи ioreg. Спробуйте цю команду:

ioreg -r -c IOUSBHostDevice -l

Він надрукує всі хост-пристрої USB, а також виведе всі властивості з піддерев'я кожного пристрою. Ви маєте змогу знайти свій пристрій на найвищому рівні залежно від його ідентифікаційного чи серійного номера. Після того, як ви знайдете його, ви зможете просканувати його піддірець і, зрештою, знайти об’єкт класу IOSerialBSDClient. Це буде містити властивість, IODialinDeviceяку ви хочете.

Якщо ви хочете це зробити програмно, ви можете додати -aопцію до ioregкоманди, яка виведе пліст-версію вищевказаного виводу. Потім ви можете розібратися з такою бібліотекою, як plistlib.

Можливо, вам буде корисно використовувати додаток IORegistryExplorer, щоб допомогти візуалізувати це, оскільки повний ioregвихід читати трохи важко! Це доступно в пакеті "Hardware IO Tools" XCode, який ви можете знайти, шукаючи завантаження на сайті розробника Apple . Ось як це виглядає на моєму пристрої:

Приклад IORegistryExplorer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.