web-dev-qa-db-ja.com

USBデバイスファイルのパスを確認する

LinuxでUSBデバイスファイルパスを正しく取得するにはどうすればよいですか?私はコマンド:find/-iname "usb"を使用し、以下のような結果を得ました。

/dev/bus/usb
/sys/bus/usb
/sys/bus/usb/drivers/usb
/sys/kernel/debug/usb

/ dev/bus/usbの下に私は見ます:

001  002  003  004  005  006

しかし、私はそれらが必要なファイルではないと思います。

/ sys/bus/usb/devices /の下:

sh-3.2# ls /sys/bus/usb/devices/
1-0:1.0  1-1:1.0  3-0:1.0  5-0:1.0  usb1     usb3     usb5
1-1      2-0:1.0  4-0:1.0  6-0:1.0  usb2     usb4     usb6

そして/ sys/bus/scsi/devices /の下にあるUSBを接続すると、次のようになります:

2:0:0:0      Host0        Host2        target2:0:0

そして私がUSBを取り外したとき私は見る:

sh-3.2# ls
Host0

それでは、どのデバイスファイルがUSBに使用されますか?どうすればそれを識別できますか? USBデバイスファイルでCプログラムを作成する必要があります...

さらに、1-1:1.0という数字を教えていただけませんか。どういう意味ですか?

ありがとうございました。

11
Tiktac

それでは、どのデバイスファイルがUSBに使用されますか?どうすればそれを識別できますか?

/sys/の背後にあるのは、主にデバイスに関する構成/情報です。 /dev/bus/usbはあなたが探しているものです。次の記事が役立つと思います

http://www.linuxjournal.com/article/7466?page=0,

かなり古いですが、それでもあなたを助けることができます。 (彼らが/proc/bus/usbについて話している記事では、今日/dev/bus/usbがあります)

さらに、1-1:1.0という数字を教えていただけませんか。どういう意味ですか?

一般的な形式は

X-Y.Z:A.B

各フィールドは、デバイスの接続ポイントを識別します。最初の2つのフィールドは必須です。

  • Xは、USBシステムが接続されているマザーボードのUSBバスです。
  • Yはバスシステムで使用中のポートです

したがって、文字列3-3で識別されるUSBデバイスは、バス3のポート3に接続されたデバイスです。

USBハブを接続すると、1つのUSBポートの接続機能が拡張されます。 Linuxカーネルは、Zフィールドを追加してこの状況を識別します。

  • Zはポートがハブで使用されています

したがって、文字列1-2.5で識別されるUSBデバイスは、バス1のポート2に接続されているハブのポート5に接続されているデバイスです。

USB仕様では、複数のUSBハブをカスケード接続できるため、Linuxカーネルは引き続き、異なるハブで使用中のポートを追加します。したがって、文字列1-2.1.1で識別されるUSBデバイスは、バス1のポート2に接続されたハブのポート1に接続されたハブのポート1に接続されたデバイスです。

これらの情報をすばやく取得する方法は、カーネルメッセージを読むことです(可能な場合)。

$ dmesg | grep usb
[... snip ...]
[ 2.047950] usb 4-1: new full-speed USB device number 2 using ohci_hcd
[ 2.202628] usb 4-1: New USB device found, idVendor=046d, idProduct=c318
[ 2.202638] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.202643] usb 4-1: Product: Logitech Illuminated Keyboard
[ 2.202648] usb 4-1: Manufacturer: Logitech
[... snip ...]

次に、パターンの最後の2つのフィールド(コロンの後)は、USBデバイスの内部セクションを識別します。

  • Aはデバイスの構成番号です
  • Bは構成のインターフェース番号です。

したがって、文字列4-1:1.1は、バス1のポート1に接続されている構成1のインターフェース1を意味します。

これらの情報は、lsusbコマンドで取得できます。

17
Federico