Saya perlu menulis skrip untuk me-restart dongle USB. Saya memiliki semua alat tetapi saya tidak dapat menautkan / dev / ttyUSBx saya ke BUS fisik dan PERANGKAT. Masalahnya adalah saya memiliki tiga dongle dengan vendor id dan produk id yang sama.
Jika saya melakukan lsusb outputnya adalah:
Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Dan saya telah melampirkannya di:
/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5
Tapi saya ingin tahu perangkat mana yang terkait dengan Perangkat Bus mana. Sebagai contoh, saya perlu mendapatkan yang berikut ini:
/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007
Saya menggunakan Ubuntu Server 10.04 dan saya menguji alat:
lsusb
hal
lsmod
Tapi aku tidak bisa mendapatkan hubungan.
Sebenarnya tidak ada cara yang baik untuk memetakan perangkat karakter seperti
/dev/ttyUSB0
ke perangkat USB dan nomor bus yang sesuai. TAPI, itu mungkin!Sesuatu seperti ini mungkin bekerja:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
Dari sana, Anda akan mendapatkan banyak informasi tentang perangkat dan perangkat induknya. Sekarang, itu semua hanya tentang parsing data tersebut untuk mendapatkan apa yang Anda inginkan. Saya pernah menggunakan ini di masa lalu:
Sekarang, jika itu bukan suap, saya tidak tahu apa itu! Mari kita jabarkan:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
- mengembalikan info tentang perangkat dan perangkat induknyased -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'
- mem-parsing data ini dan mengembalikan setiap baris yang mengandung atribut "devnum" atau "busnum". Kami akan berasumsi bahwa "busnum" terdaftar pertama ... dan dalam hal ini ... kami hanya dapat mengambil dua baris pertama output.head -n 2
- Ambil 2 garis output pertama. Kita bisa menjadi lebih mewah di sini, tetapi kita hanya membuat asumsi bahwa "busnum" dan "devnum" orang tua terdekat akan didaftar terlebih dahulu.awk '{$1 = sprintf("%03d", $1); print}'
- Mengambil digit itu dan membalutnya dengan nol.echo /dev/bus/usb
... - semua jazz ini dibungkus menjadiecho
pernyataan untuk mengganti baris baru dengan spasi. Anda dapat menambahkan-n
keecho
jika Anda ingin memotong baris tambahan.tr " " "/"
- ganti spasi dalam output dengan garis miring ke depanIni akan menampilkan sesuatu seperti:
... yang, tentu saja, adalah perangkatnya. Jika mau, Anda dapat dengan mudah menampilkan sesuatu seperti
busnum:001 devnum:011
dengan beberapa penyesuaian:sumber
Anda dapat menemukan semua informasi tentang simpul menggunakan perintah di bawah ini:
sumber