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.