Saya menggunakan sejumlah adapter USB-to-serial yang identik dengan laptop saya (Ubuntu 9.10). Adaptor diproduksi oleh Sabrent dan dibangun di sekitar IC PL2303 Prolific, seperti yang ditunjukkan oleh lsusb
:
Bus 001 Device 008: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 007: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Tak satu pun dari atribut yang ditampilkan udevadm
tampaknya unik untuk adaptor tertentu:
foo@bar:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0
looking at device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.1/1-4.1:1.0/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="usb-serial"
DRIVER=="pl2303"
ATTR{port_number}=="0"
looking at parent device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.1/1-4.1:1.0':
KERNELS=="1-4.1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="pl2303"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00"
ATTRS{supports_autosuspend}=="1"
looking at parent device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.1':
KERNELS=="1-4.1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="538"
ATTRS{idVendor}=="067b"
ATTRS{idProduct}=="2303"
ATTRS{bcdDevice}=="0300"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="1"
ATTRS{devnum}=="6"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Prolific Technology Inc."
ATTRS{product}=="USB-Serial Controller"
<snip>
foo@bar:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB1
looking at device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.5/1-4.5:1.0/ttyUSB1':
KERNEL=="ttyUSB1"
SUBSYSTEM=="usb-serial"
DRIVER=="pl2303"
ATTR{port_number}=="0"
looking at parent device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.5/1-4.5:1.0':
KERNELS=="1-4.5:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="pl2303"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00"
ATTRS{supports_autosuspend}=="1"
looking at parent device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.5':
KERNELS=="1-4.5"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="69"
ATTRS{idVendor}=="067b"
ATTRS{idProduct}=="2303"
ATTRS{bcdDevice}=="0300"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="1"
ATTRS{devnum}=="7"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Prolific Technology Inc."
ATTRS{product}=="USB-Serial Controller"
<snip>
Semua adapter dicolokkan ke hub USB tunggal. Karena saya tidak dapat membedakan antara adaptor itu sendiri, adakah yang bisa saya tuliskan aturan udev yang menetapkan nama setiap adaptor berdasarkan pada port fisik mana pada hub yang dihubungkan adaptor itu?
sumber
Meskipun tidak akan membantu dalam kasus khusus ini, beberapa adapter diberi id seri unik:
Contoh id serial adaptor:
dan aturan udev akan mengandung:
Sumber
sumber
Sudahkah Anda melihat isinya
/dev/serial/by-id/
? Dalam situasi yang sama setiap perangkat diberi ID persisten unik di sana (saya akui tidak tahu apa yang sebenarnya diwakilinya).sumber
<VENDOR><delimeter><MODEL><delimeter><SERIAL>
Karena pertanyaan awal diajukan 3 tahun yang lalu, ini mungkin tidak memberi tahu penanya, tetapi saya akan mempostingnya untuk referensi di masa mendatang.
Ada cara untuk memprogram ulang Serial-Number dengan mengakses EEPROM dari FTDI-Chips, Silicon labs menyediakan alat, tetapi hanya Windows:
Halaman produk -> Alat-> Utilitas Kustomisasi Fungsi Tetap
Tautan langsung
Instruksi dapat ditemukan di remotehq:
http://remoteqth.com/wiki/index.php?page=How+to+set+usb+device+SerialNumber
Ada juga perpustakaan Unix di Sourceforge. Ini hanya diuji dengan CP2101 / CP2102 / CP2103 dan saya tidak mencobanya secara pribadi.
http://sourceforge.net/projects/cp210x-program/
sumber
Menggunakan jawaban daripada komentar karena saya perlu memformat.
Saya punya masalah ini dan mudah diperbaiki dengan menggunakan program C kecil untuk memanipulasi teks% devpath atau atribut USB lain yang Anda pilih.
Anda kemudian memanggil program itu seperti ini:
di mana multiusbserial-id adalah program C yang dikompilasi.
Program hanya perlu mencetak teks setelah titik tertentu, sehingga tidak rumit
Saya menulis artikel blog dengan lebih detail. Ini adalah salah satu dari rangkaian pengaturan lingkungan pemrograman tim sistem tertanam.
sumber
Anda dapat membuat daftar perangkat serial USB seperti ini
Dua baris diakhiri dengan
Ini pada Raspberry Pi. Saya sekarang akan membiarkan perangkat
ttyUSB1
terhubung, dan mengeluarkan adaptorttyUSB0
dan tancapkan ke port lain, lalu yang lain, dan kemudian kembali ke port awalSaya tidak tahu mengapa
1-1.3:1.0
tidak dibersihkan setelah pemutusan, tetapi saya bisa hidup dengan itu, karena saya jarang mengubah adaptor dari satu port USB ke yang lain.Masalah saya adalah bahwa pada Raspberry Pi yang mengontrol rana relay melalui Arduino yang terpasang melalui kabel USB dan membaca data sensor lingkungan melalui Arduino lain (produsen yang sama, model yang sama), kadang-kadang, ketika jendela diaktifkan, data sensor Arduino ditendang dari papan dan dipindahkan dari ttyUSB0 ke ttyUSB2 (ttyUSB1 adalah penutup). Saya berakhir dengan skrip Python ini karena tidak harus mencari tahu dengan coba-coba perangkat mana data sensor sekarang.
yang memberi saya output berikut
Saya hanya melakukan pemeriksaan ini ketika batas waktu karena kesalahan koneksi terjadi.
sumber