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という数字を教えていただけませんか。どういう意味ですか?
ありがとうございました。
それでは、どのデバイスファイルが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つのフィールドは必須です。
したがって、文字列3-3
で識別されるUSBデバイスは、バス3のポート3に接続されたデバイスです。
USBハブを接続すると、1つのUSBポートの接続機能が拡張されます。 Linuxカーネルは、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デバイスの内部セクションを識別します。
したがって、文字列4-1:1.1
は、バス1のポート1に接続されている構成1のインターフェース1を意味します。
これらの情報は、lsusb
コマンドで取得できます。