Tại sao liệt kê cổng USB thay đổi?


10

Tôi đang sử dụng modem USB Huawei GMS / UMTS với Gnokii và Gammu. Modem nằm ở cổng dưới trên Pi. Với dmesg | grep ttynó sẽ hiển thị trên /dev/ttyUSB0/dev/ttyUSB1. (2 thiết bị USB trên 1 thanh là bình thường, trong trường hợp này).

Tôi đã cấu hình Gnokii và Gammu tương ứng, tuy nhiên trên ttyUSB0 tôi chỉ có thể gửi tin nhắn. Cả gửi và nhận sẽ chỉ hoạt động trên ttyUSB1.

Sau đó, tôi di chuyển thanh đến ổ cắm USB phía trên (vì nếu không, thanh WiFi của tôi sẽ không vừa với nó). Mọi thứ vẫn hoạt động tốt. Ngoài ra sau vài lần khởi động lại, lạnh và ấm.

Sau đó tôi cần mở rộng hệ thống tập tin (Vâng, tôi biết tôi nên làm điều đó sớm hơn). Sau đó, modem đã được bật ttyUSB0 và ttyUSB * 2 *. Gửi / nhận làm việc sau này. Điều này làm tôi mất một thời gian để tìm hiểu.

Cập nhật: 2 ngày sau, ttyUSB2 đã biến mất. Hiện tại modem hoạt động thể hiện trên ttyUSB0 (là ttyUSB1).

Bất cứ ý tưởng tại sao điều này xảy ra? Bất kỳ liên kết đến tài liệu debian hoặc linux có liên quan, có lẽ? Tôi sẽ có nhiều nghĩa vụ ..


Hãy thử sử dụng tên trong /sys/class/tty/hướng dẫn.
Lekensteyn

Các ttyUSB duy nhất trong / sys / class / tty là ttyUSB0 và ttyUSB1. Hiện nay. Ai biết được ngày mai sẽ ra sao.
RolfBly

Bảng liệt kê USB thay đổi theo thiết kế, bạn cắm một thiết bị mới và nhận số mới. hoặc có thể là một thiết bị cũ trong khi số cổng trước vẫn đang bận rộn với việc chuyển chưa hoàn thành. cố gắng không kết nối lại thiết bị quá sớm và đảm bảo tất cả phần mềm sử dụng các thiết bị này đã vui vẻ kết thúc công việc của họ.
lenik

Câu trả lời:


16

Tài liệu Gammu gợi ý (nhưng không đi sâu vào bất kỳ chi tiết nào) một cách giải quyết,

Chỉnh sửa: Atmel có một Lưu ý ứng dụng mô tả độc đáo quy trình liệt kê.

Việc liệt kê thay đổi vì nó xảy ra trong một cuộc trò chuyện giữa máy chủ, trung tâm và thiết bị và thời gian phản hồi từ mỗi trong số này có thể khác nhau, ngay cả khi thiết lập giống hệt nhau từ lần khởi động lại tiếp theo.

Cập nhật: Giải pháp không dễ tìm thấy trên mạng và nằm rải rác khắp nơi. Vì vậy, tôi đặt tất cả cùng nhau trong một tài liệu . Đây là những gì nó sôi lên.
1. tìm hiểu những gì trên ttyUSB:

dmesg | grep ttyUSB  

2. liệt kê tất cả các thuộc tính của thiết bị và chọn ra một bộ định danh duy nhất, ví dụ idVendor + idSản phẩm (và nếu cần Số sê-ri nếu bạn có nhiều hơn một thiết bị có cùng idVendor và idSản phẩm).

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

3. Tạo một tệp /etc/udev/rules.d/99-usb-serial.rulescó nội dung giống như dòng này trong đó:

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

(giả sử bạn không cần số sê-ri ở đó và tất nhiên với các số cho idVendor và idSản phẩm mà bạn đã tìm thấy ở bước 2.
4. Tải quy tắc mới:

sudo udevadm trigger

5. Xác minh những gì đã xảy ra:

ls -l /dev/your_device_name  

sẽ hiển thị số ttyUSB mà symlink đã sử dụng. Nếu là vậy /dev/ttyUSB1, thì hãy xác minh xem ai sở hữu nhóm đó và thuộc nhóm nào:

ls -l /dev/ttyUSB1   

Sau đó, chỉ để cho niềm vui của nó:

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

8

Bạn đã trả lời một phần câu hỏi của riêng bạn, nhưng có một cách khác để làm điều đó, đặc biệt là đối với các thiết bị nối tiếp: /dev/serial/*đường dẫn. Tôi có giao diện Prolific USB → RS232 trên Raspberry Pi mà hầu như luôn hiển thị là /dev/ttyUSB0. Nhưng nó cũng xuất hiện trên hệ thống như:

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

Việc sử dụng by-idliên kết sẽ giữ nguyên, trừ khi tôi thêm một trình chuyển đổi dựa trên PL2303 khác.


.. Và khi ai đó thực sự thêm một bộ chuyển đổi dựa trên PL2303 mới. (2 trong số họ) thì những gì có thể được donw?
Obmerk Kronen

Bạn đang bị mắc kẹt. Tôi thích trộn và kết hợp các thương hiệu để tránh điều này.
kiểm tra

Điều này vô cùng hữu ích cho một cổng Nối tiếp đang thay đổi tôi trong Python -thanks!
GhostToast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.