GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengikat perangkat USB dengan nama statis?

Seperti yang disarankan, Anda dapat menambahkan beberapa aturan udev. Saya mengedit /etc/udev/rules.d/10-local.rules berisi:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

Anda dapat memeriksa variabel perangkat Anda dengan menjalankan

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

Ada panduan lebih mendalam yang dapat Anda baca di http://www.reactivated.net/writing_udev_rules.html


Sintaks aturan di atas dapat berfungsi pada beberapa distribusi, tetapi tidak berfungsi pada milik saya (Raspbian). Karena saya tidak pernah menemukan satu dokumen pun yang menjelaskan semua seluk beluknya, saya menulis sendiri, yang dapat ditemukan di sini. Inilah intinya.
1. cari tahu apa yang ada di ttyUSB:

dmesg | grep ttyUSB  

2. daftarkan semua atribut perangkat:

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

(dengan nomor perangkat Anda, bukan x, tentu saja). Pilih satu set pengidentifikasi unik, misalnya idVendor + idProduct. Anda mungkin juga memerlukan SerialNumber jika Anda memiliki lebih dari satu perangkat dengan idVendor dan idProduct yang sama. SerialNumbers harus unik untuk setiap perangkat.
3. Buat file /etc/udev/rules.d/99-usb-serial.rules dengan 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 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 dituju oleh symlink. Jika /dev/ttyUSB1 , lalu verifikasi siapa pemiliknya dan termasuk grup mana:

ls -l /dev/ttyUSB1   

Maka hanya untuk bersenang-senang:

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

Masalah beberapa perangkat USB identik

Saya memiliki Rasperry Pi dengan empat kamera. Saya mengambil gambar dengan fswebcam yang mengidentifikasi kamera sebagai /dev/video0 .. video3 . Terkadang kameranya adalah video0 , vide02 , video4 dan video6 tapi kita bisa melupakannya untuk saat ini.

Saya memerlukan ID tetap untuk mengidentifikasi nomor kamera sehingga, mis. video0 selalu kamera yang sama karena saya memberi judul pada gambar. Sayangnya hal ini tidak terjadi dengan andal - saat boot, kamera disebutkan sebagai video0 ..video3 tetapi tidak selalu dengan cara yang sama.

Semua kamera memiliki ID dan nomor seri yang sama.

Solusi untuk masalah ini melibatkan aturan udev, tetapi ada banyak kail juga.

Jika Anda mengeluarkan perintah

udevadm info –attribute-walk –path=/dev/video0

Anda mendapatkan screed output tetapi bit yang menonjol adalah

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

Bit KERNELS adalah port hub USB. Dengan empat kamera, ada empat di antaranya - tidak berubah saat reboot, tetapi video{x} terkait dengan port mungkin berubah.

Jadi kami membutuhkan aturan udev untuk mengikat nomor video ke port hub USB - seperti:

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

Terlihat sederhana – akses kamera dengan

fswebcam –d  $realpath /dev/camera0

Kecuali itu tidak berfungsi – jika Anda memasukkan ini ke dalam aturan udev dan sistem telah mengalokasikan video0 (saat boot) ke port yang berbeda, aturan udev akan diabaikan. Symlink ke /dev/camera0 pada dasarnya mengatakan no such device . Titik awal.

Yang kami inginkan adalah mengikat symlink ke alamat hub USB, bukan video{x} nomor. Butuh program Python.

Langkah pertama adalah menjalankan

fswebcam –d /dev/video${x}  tst.jpg

untuk x antara 1 dan 8. Adanya tst.jpg setelah setiap panggilan mengidentifikasi apakah ada kamera di nomor video ini. Dari sini buat daftar nomor video aktif. Pengalaman saya adalah 0,1,2,3 atau 0,2,4,6 untuk kamera yang saya gunakan.

Orang lain tentu saja dapat membuat daftar ini menggunakan proses yang berbeda.

Kemudian untuk setiap nomor video dalam daftar, jalankan

udevadm info –attribute-walk –path=/dev/videox > dd

dan ekstrak KERNELS= line dari dd . Dari proses ini Anda mendapatkan daftar alamat port USB untuk kamera. Sortir daftar ini agar pada langkah selanjutnya Anda selalu memprosesnya dengan urutan yang sama. Sebut ini "daftar alamat".

Jalankan udevadm … > dd hal lagi dan buat daftar yang terlihat seperti

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

Sekarang telusuri daftar alamat - untuk setiap entri, temukan entri yang sesuai dari daftar video. Buat daftar baru yang terlihat seperti kumpulan garis seperti

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

x (nomor symlink) diganti dengan nomor urut dalam daftar alamat.

Sekarang Anda memiliki aturan udev yang berfungsi. Sebuah symlink yang terikat ke alamat hub USB, apa pun nomor video yang dialokasikan ke port tersebut saat boot.

Tulis daftar terakhir ke dalam file /etc/udev/rules.d/cam.rules . Jalankan udevadm trigger untuk mengaktifkannya dan pekerjaan selesai. /dev/camera2 akan menjadi kamera yang sama (port USB) terlepas dari nomor videonya.


Linux
  1. Bagaimana cara memilih nomor port statis untuk aplikasi khusus?

  2. Bagaimana cara mengikat kamera USB v4l2 ke nama perangkat yang sama bahkan setelah reboot?

  3. Cara menentukan USB Versi 1.1 atau 2.0

  1. 4 Cara Berguna untuk Mengetahui Nama Perangkat USB yang Dicolokkan di Linux

  2. Bagaimana Cara Menjalankan Skrip Kustom Pada Plug-in Perangkat Usb?

  3. Linux – Bagaimana Cara Mengikat Perangkat Usb Dengan Nama Statis?

  1. Linux – Bagaimana Cara Menghubungkan Kembali Perangkat Usb yang Terputus Secara Logis?

  2. Bagaimana Anda bisa mengidentifikasi chipset perangkat usb di Linux?

  3. Bagaimana cara mendapatkan vendor USB dan info produk secara terprogram di Linux?