GNU/Linux >> Belajar Linux >  >> Linux

Perintah Untuk Menentukan Port Perangkat (seperti /dev/ttyusb0)?

Saya punya pertanyaan tentang port di Linux. Jika saya menghubungkan perangkat saya melalui USB dan ingin memeriksa portnya, saya tidak dapat melakukannya menggunakan perintah lsusb, yang hanya menentukan nomor bus dan nomor perangkat di bus ini:

[[email protected] ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Apakah ada perintah yang memberi tahu saya port yang terhubung langsung dengan perangkat? Satu-satunya cara untuk melakukan ini sampai sekarang adalah memutuskan sambungan dan menyambungkan kembali dan menggunakan perintah:

[[email protected] ~]$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    4.378109] systemd[1]: Starting system-getty.slice.
[    4.378543] systemd[1]: Created slice system-getty.slice.
[    8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0

Pada baris terakhir terlihat bahwa perangkat saya terhubung ke /dev/ttyUSB0 .

Jawaban yang Diterima:

Saya tidak yakin apa yang Anda tanyakan. Anda menyebutkan 'port' beberapa kali, tetapi kemudian dalam contoh Anda, Anda mengatakan jawabannya adalah /dev/ttyUSB0 , yang merupakan jalur pengembangan perangkat, bukan port. Jadi jawaban ini adalah tentang menemukan jalur pengembangan untuk setiap perangkat.

Di bawah ini adalah skrip cepat dan kotor yang berjalan melalui perangkat di /sys mencari perangkat USB dengan ID_SERIAL atribut. Biasanya hanya perangkat USB asli yang memiliki atribut ini, sehingga kami dapat memfilternya. Jika tidak, Anda akan melihat banyak hal dalam daftar yang bukan perangkat fisik.

#!/bin/bash

for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
    (
        syspath="${sysdevpath%/dev}"
        devname="$(udevadm info -q name -p $syspath)"
        [[ "$devname" == "bus/"* ]] && exit
        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && exit
        echo "/dev/$devname - $ID_SERIAL"
    )
done

Di sistem saya, ini menghasilkan sebagai berikut:

/dev/ttyACM0 - LG_Electronics_Inc._LGE_Android_Phone_VS930_4G-991c470
/dev/sdb - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/sdb1 - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/input/event5 - Logitech_USB_Receiver
/dev/input/mouse1 - Logitech_USB_Receiver
/dev/input/event2 - Razer_Razer_Diamondback_3G
/dev/input/mouse0 - Razer_Razer_Diamondback_3G
/dev/input/event3 - Logitech_HID_compliant_keyboard
/dev/input/event4 - Logitech_HID_compliant_keyboard

Penjelasan:

find /sys/bus/usb/devices/usb*/ -name dev

Perangkat yang muncul di /dev memiliki dev file di /sys mereka direktori. Jadi kami mencari direktori yang cocok dengan kriteria ini.
 

syspath="${sysdevpath%/dev}"

Kami menginginkan jalur direktori, jadi kami menghapus /dev .
 

devname="$(udevadm info -q name -p $syspath)"

Ini memberi kita jalan di /dev yang sesuai dengan /sys ini perangkat.
 

[[ "$devname" == "bus/"* ]] && exit

Ini menyaring hal-hal yang bukan perangkat sebenarnya. Jika tidak, Anda akan mendapatkan hal-hal seperti pengontrol &hub USB. exit keluar dari subkulit, yang mengalir ke iterasi loop berikutnya.
 

eval "$(udevadm info -q property --export -p $syspath)"

Properti udevadm info -q property --export perintah mencantumkan semua properti perangkat dalam format yang dapat diuraikan oleh shell menjadi variabel. Jadi kita cukup memanggil eval hal ini. Ini juga alasan mengapa kami membungkus kode dalam tanda kurung, sehingga kami menggunakan subkulit, dan variabel dihapus pada setiap loop.
 

[[ -z "$ID_SERIAL" ]] && exit

Lebih banyak pemfilteran hal-hal yang bukan perangkat sebenarnya.
 

echo "/dev/$devname - $ID_SERIAL"

Saya harap Anda tahu apa yang dilakukan baris ini

Terkait:Bagaimana cara mencatat perintah dalam "sudo su -"?
Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  3. Kapan Menggunakan /dev/random Vs /dev/urandom?

  1. Linux – /dev/xvde1?

  2. Cara memetakan perangkat /dev/sdX dan /dev/mapper/mpathY dari perangkat /dev/dm-Z

  3. DD dari /dev/zero ke /dev/null...apa yang sebenarnya terjadi

  1. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  2. kernel:menonaktifkan /dev/kmem dan /dev/mem

  3. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0