Saya memiliki Arduino yang terkadang terikat /dev/ttyUSB0
dan lain kali /dev/ttyUSB1
, membuat skrip saya gagal.
Saya tidak ingin menyebutkan semua kemungkinan di mana perangkat saya berada, tetapi saya lebih suka memilikinya terikat di suatu tempat yang statis, misalnya /dev/arduino
.
Bagaimana saya mencapainya?
linux
arch-linux
usb
serial-port
arduino
k0pernikus
sumber
sumber
Jawaban:
Seperti yang disarankan, Anda dapat menambahkan beberapa aturan udev. Saya mengedit
/etc/udev/rules.d/10-local.rules
agar mengandung:Anda dapat memeriksa variabel perangkat Anda dengan menjalankan
Ada panduan lebih mendalam yang dapat Anda baca di http://www.reactivated.net/writing_udev_rules.html
sumber
udevam
? Dan penting untuk dicatat yangmy_uart
menciptakan symlink di bawah/dev/my_uart
. Saya pertama kali menulis/dev/arduino
pertama kali dan gagal sementaraarduino
cukup.udevadm
harus keluar dengan sendirinya ketika sudah selesai.Sintaks aturan di atas mungkin berfungsi pada beberapa distribusi, tetapi tidak berfungsi pada saya (Raspbian). Karena saya tidak pernah menemukan satu dokumen yang menjelaskan semua seluk beluk, saya menulis sendiri, untuk ditemukan di sini . Inilah yang menjadi intinya.
1. cari tahu apa yang ada di ttyUSB:
2. daftar semua atribut perangkat:
(dengan nomor perangkat Anda, bukan x, tentu saja). Pilih satu set pengenal unik, mis. IdVendor + idProduct. Anda juga mungkin memerlukan SerialNumber jika Anda memiliki lebih dari satu perangkat dengan idVendor dan idProduct yang sama. SerialNumber harus unik untuk setiap perangkat.
3. Buat file
/etc/udev/rules.d/99-usb-serial.rules
dengan sesuatu seperti baris ini di dalamnya:(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:
5. Verifikasi apa yang terjadi:
akan menunjukkan nomor ttyUSB yang digunakan untuk symlink. Jika ya
/dev/ttyUSB1
, verifikasi siapa yang memiliki itu dan milik kelompok itu:Maka hanya untuk bersenang-senang:
sumber
idVendor
danidProduct
persis sama? (dua sensor terpasang pada model identik USB ke modul UART)udevadm info --name=/dev/ttyUSB1 --attribute-walk
untuk kedua perangkat dan cari nomor seri, mereka harus unik untuk setiap perangkat. Jika sensor Anda tidak memiliki nomor seri, dapatkah Anda menentukan apa itu?Masalah multi-identik-USB-perangkat
Saya memiliki Rasperry Pi dengan empat kamera. Aku mengambil pix dengan
fswebcam
yang mengidentifikasi kamera sebagai/dev/video0
..video3
. Kadang-kadang kameravideo0
,vide02
,video4
danvideo6
tapi kami bisa melupakan bahwa untuk saat ini.Saya memerlukan ID gigih untuk mengidentifikasi nomor kamera sehingga, mis.
video0
Selalu kamera yang sama karena saya caption gambar. Sayangnya ini tidak terjadi secara andal - saat boot, kamera-kamera tersebut disebutkan sebagaivideo0
..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 pancing di sana juga.
Jika Anda mengeluarkan perintah
Anda mendapatkan screed dari output tetapi bit yang menonjol adalah
Bit KERNELS adalah port hub USB. Dengan empat kamera ada empat ini - mereka tidak berubah saat reboot, tetapi yang
video{x}
terkait dengan port mungkin berubah.Jadi kita memerlukan aturan udev untuk mengikat nomor video ke port hub USB - sesuatu seperti:
Terlihat sederhana - akses kamera dengan
Kecuali itu tidak berfungsi - jika Anda meletakkan ini dalam aturan udev dan sistem telah mengalokasikan video0 (saat boot) ke port yang berbeda, aturan udev diabaikan. Symlink pada
/dev/camera0
dasarnya mengatakanno such device
. Satu persegi.Yang kami inginkan adalah mengikat symlink ke alamat hub USB, bukan
video{x}
nomor. Butuh program Python.Langkah pertama adalah berlari
untuk
x
antara 1 dan 8. Keberadaantst.jpg
setelah setiap panggilan mengidentifikasi apakah ada kamera pada nomor video ini. Dari ini buat daftar nomor video aktif. Pengalaman saya telah bahwa itu adalah baik0,1,2,3
atau0,2,4,6
untuk kamera saya telah digunakan.Orang lain tentu saja membangun daftar ini menggunakan proses yang berbeda.
Kemudian untuk setiap nomor video dalam daftar jalankan
dan ekstrak
KERNELS= line
daridd
. Dari proses ini Anda berakhir dengan daftar alamat port USB untuk kamera. Urutkan daftar ini sehingga pada langkah berikutnya, Anda selalu memprosesnya dalam urutan yang sama. Sebut ini "daftar alamat".Jalankan
udevadm … > dd
hal itu lagi dan buat daftar yang terlihat sepertiSekarang lewati daftar alamat - untuk setiap entri temukan entri yang sesuai dari daftar video. Buat daftar baru yang terlihat seperti kumpulan garis
X (nomor symlink) diganti dengan nomor urut dalam daftar alamat.
Sekarang Anda memiliki aturan udev yang berfungsi. Symlink yang terikat ke alamat hub USB tidak peduli berapa nomor video yang dialokasikan ke port tersebut saat boot.
Tulis daftar akhir ke dalam file
/etc/udev/rules.d/cam.rules
. Jalankanudevadm trigger
untuk mengaktifkannya dan pekerjaan selesai./dev/camera2
akan menjadi kamera yang sama (port USB) terlepas dari nomor videonya.sumber
Saya juga dapat menemukan perangkat unik di
/dev/serial/by-id
. Saya belum mencoba reboot, tetapi file-file di direktori itu hanyalah tautan ke file perangkat yang sesuai (ttyACM[0-9]
) .`Saya menjalankan linux arch di Raspberry Pi, tapi saya menemukan mereka hanya dengan melakukan
find
nama file yang mengandung "Arduino". Program python saya berjalan dengan baik menggunakan file-file itu sebagai perangkat untuk membaca / menulis data ke / dari Arduinos saya (sejauh ini, dua pada satu Pi).sumber
Hanya untuk mengatakan bahwa di atas bekerja untuk saya dan juga mengotomatiskan perangkat untuk saya setelah saya meletakkan entri di / etc / fstab (dan juga memanggil umount setelah melepas tongkat)
yaitu
/ etc / fstab
cat /etc/udev/rules.d/5-usb-stick.rules
Jadi setelah memasukkan stik usb saya, saya dapat:
sumber