Mengapa enumerasi port USB berubah?

10

Saya menggunakan modem USB Huawei GMS / UMTS dengan Gnokii dan Gammu. Modem berada di port yang lebih rendah pada Pi. Dengan dmesg | grep ttyitu akan muncul /dev/ttyUSB0dan /dev/ttyUSB1. (2 perangkat USB pada 1 stick adalah normal, dalam hal ini).

Saya mengkonfigurasi Gnokii dan Gammu, namun pada ttyUSB0 saya hanya bisa mengirim pesan. Baik pengiriman dan penerimaan hanya akan berfungsi pada ttyUSB1.

Saya kemudian memindahkan tongkat ke soket USB atas (karena kalau tidak, WiFi-stick saya tidak muat di sebelahnya). Semuanya tetap bekerja dengan baik. Juga setelah beberapa reboot, dingin dan hangat.

Saya kemudian perlu memperluas sistem file (Ya, saya tahu saya harus melakukan itu sebelumnya). Setelah itu, modem berada di ttyUSB0 dan ttyUSB * 2 *. Kirim / terima bekerja pada yang terakhir. Saya butuh waktu untuk mencari tahu.

Pembaruan: 2 hari kemudian, ttyUSB2 telah menghilang. Modem yang berfungsi sekarang memanifestasikan dirinya pada ttyUSB0 (ttyUSB1).

Adakah yang tahu mengapa ini terjadi? Adakah tautan ke dokumen debian atau linux yang relevan, mungkin? Saya akan sangat berterima kasih ..

RolfBly
sumber
Coba gunakan nama-nama /sys/class/tty/sebagai panduan.
Lekensteyn
Satu-satunya ttyUSB di / sys / class / tty adalah ttyUSB0 dan ttyUSB1. Sekarang. Siapa yang tahu besok apa.
RolfBly
Enumerasi USB berubah sesuai desain, Anda mencolokkan perangkat baru dan mendapatkan nomor baru. atau mungkin perangkat lama sementara nomor port sebelumnya masih sibuk dengan transfer yang belum selesai. cobalah untuk tidak menghubungkan kembali perangkat terlalu cepat dan pastikan semua perangkat lunak yang menggunakan perangkat ini dengan senang hati menyelesaikan bisnis mereka.
lenik

Jawaban:

16

Dokumentasi Gammu menyarankan (tetapi tidak membahas secara detail) solusinya,

Sunting: Atmel memiliki Catatan Aplikasi yang dengan baik menjelaskan proses enumerasi.

Enumerasi berubah karena terjadi dalam percakapan antara host, hub dan perangkat, dan waktu respons dari masing-masing dapat bervariasi, bahkan jika pengaturannya identik dari satu reboot ke yang berikutnya.

Pembaruan: Solusinya tidak mudah ditemukan online, dan tersebar berkeping-keping di semua tempat. Jadi saya mengumpulkan semuanya dalam satu dokumen . Inilah yang menjadi intinya.
1. cari tahu apa yang ada di ttyUSB:

dmesg | grep ttyUSB  

2. daftarkan semua atribut perangkat dan pilih set pengenal unik, mis. IdVendor + idProduct (dan jika perlu SerialNumber jika Anda memiliki lebih dari satu perangkat dengan idVendor dan idProduct yang sama).

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

3. Buat file /etc/udev/rules.d/99-usb-serial.rulesdengan sesuatu seperti baris ini di dalamnya:

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

(dengan asumsi Anda tidak memerlukan nomor seri di sana, dan tentu saja dengan nomor untuk idVendor dan idProduct yang Anda temukan di langkah 2.
4. Muat aturan baru:

sudo udevadm trigger

5. Verifikasi apa yang terjadi:

ls -l /dev/your_device_name  

akan menunjukkan nomor ttyUSB yang digunakan untuk symlink. Jika ya /dev/ttyUSB1, verifikasi siapa yang memiliki itu dan milik kelompok itu:

ls -l /dev/ttyUSB1   

Maka hanya untuk bersenang-senang:

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

Anda telah sebagian menjawab pertanyaan Anda sendiri, tetapi ada cara lain untuk melakukannya, terutama untuk perangkat serial: /dev/serial/*jalur. Saya memiliki antarmuka Prolific USB → RS232 pada Raspberry Pi saya yang hampir selalu muncul sebagai /dev/ttyUSB0. Tetapi itu juga muncul pada sistem sebagai:

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

Menggunakan by-idtautan harus tetap sama, kecuali saya menambahkan konverter berbasis PL2303 lainnya.

scruss
sumber
..Dan ketika seseorang benar-benar menambahkan konverter berbasis PL2303 baru. (2 dari mereka) lalu apa yang bisa donw?
Obmerk Kronen
Anda terjebak. Saya lebih suka mencampur dan mencocokkan merek untuk menghindari ini.
scruss
Ini sangat membantu untuk port Serial yang berubah pada saya dengan Python -terima kasih!
GhostToast