Чому перелік USB-портів змінюється?


10

Я використовую USB-модем Huawei GMS / UMTS з Gnokii та Gammu. Модем був у нижньому порту на Пі. З dmesg | grep ttyнею буде відображатися на /dev/ttyUSB0і /dev/ttyUSB1. (У цьому випадку 2 пристрої USB на 1 палиці є нормальним).

Я відповідно налаштував Gnokii та Gammu, проте на ttyUSB0 я міг лише надсилати повідомлення. Як відправлення, так і отримання буде працювати лише над ttyUSB1.

Потім я перемістив палицю у верхню розетку USB (тому що в іншому випадку мій WiFi-накопичувач не розмістився б поруч). Все нормально працювало. Також після декількох перезавантажень холодно і тепло.

Потім мені потрібно було розширити файлову систему (Так, я знаю, що я повинен був зробити це раніше). Після цього модем був на ttyUSB0 та ttyUSB * 2 *. Надсилати / отримувати працювали над останнім. Це знадобило мені трохи часу, щоб дізнатися.

Оновлення: через 2 дні ttyUSB2 зник. Тепер працюючий модем проявляється на ttyUSB0 (був ttyUSB1).

Будь-яка ідея, чому це сталося? Будь-які посилання на відповідні документи debian чи Linux, можливо? Я був би дуже зобов'язаний ..


Спробуйте використовувати імена в /sys/class/tty/якості посібника.
Лекенштейн

Єдиними ttyUSB в / sys / class / tty є ttyUSB0 та ttyUSB1. Тепер. Хто знає, що це буде завтра.
RolfBly

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

Відповіді:


16

Документація Gammu пропонує (але не вказує жодної деталі) рішення,

Редагувати: Atmel має примітку про додаток, яка добре описує процес перерахування.

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

Оновлення: рішення не легко знайти в мережі, а розкидане по частинах по всьому місцю. Тож я все це склав в один документ . Це те, до чого зводиться.
1. з'ясуйте, що на ttyUSB:

dmesg | grep ttyUSB  

2. перерахуйте всі атрибути пристрою та виберіть унікальний набір ідентифікаторів, наприклад idVendor + idProduct (і, якщо потрібно, SerialNumber, якщо у вас є більше одного пристрою з тим же idVendor та idProduct).

udevadm info --name=/dev/ttyUSB1 --attribute-walk

3. Створіть у файлі /etc/udev/rules.d/99-usb-serial.rulesщось подібне до цього рядка:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(Припускаючи , що вам не потрібен серійний номер є, і, звичайно , з номерами для idVendor і idProduct , що ви знайшли в кроці 2.
4. Завантажте нове правило:

sudo udevadm trigger

5. Перевірте, що сталося:

ls -l /dev/your_device_name  

покаже, на яке число ttyUSB перейшло символьне посилання. Якщо це так /dev/ttyUSB1, то перевірте, хто йому належить та до якої групи він належить:

ls -l /dev/ttyUSB1   

Тоді просто заради цього:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

8

Ви частково відповіли на власне запитання, але є інший спосіб зробити це, особливо для серійних пристроїв: /dev/serial/*шляхи. У мене на моєму Raspberry Pi є плідний інтерфейс USB → RS232, який майже незмінно відображається як /dev/ttyUSB0. Але він також з'являється в системі як:

  • /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-port0
  • /dev/serial/by-id/usb-067b_2303-if00-port0

Використання by-idпосилання має залишатися незмінним, якщо я не додаю інший конвертер на основі PL2303.


.. І коли хтось дійсно додає новий перетворювач на базі PL2303. (2 з них), то що можна дати?
Обмерк Кронен

Ви застрягли. Я вважаю за краще змішувати та узгоджувати бренди, щоб цього не було.
scruss

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