USBをマイコンピュータのポートに接続した後、これを行うと、lsusb
あなたが探しているデバイスが表示されます。
Bus 001 Device 004: ID 04f2:b573 Some Manufacturer
以下にデバイスをリストすると、...などのような多くの/dev/
デバイスパスが表示されます。私が理解しているように、これらのパスの1つは私のUSBデバイス、または私のUSBデバイスが接続されている場所です。/dev/tty0
/dev/ttyUSB0
どれがIDを持っているのか、どうすればわかりますか04f2:b573
?
この問題しかし、私と似ています(参照受け入れられた回答$ID_SERIAL
)正確には何か、私が探しているIDと同じように設定する方法、さらには正しいパスが何であるかわかりません(その例では/dev/ttyACM0
、、、、..などの複数のデバイスパスを表示するためです)。/dev/sdb
/dev/input/event5
また、2番目の答えは、デバイスがに接続されていることを知っていると仮定します。/dev/ttyUSB0
これは事前にわかりません(しかし、この特定のパスでテストしても何も提供されませんでした)。
答え1
どれがIDを持っているのか、どうすればわかりますか
04f2:b573
?
これを行うより良い方法があるかもしれませんが、迅速で汚い方法は次のとおりです。
find_by_id(){
v=${1%:*}; p=${1#*:} # split vid:pid into 2 vars
v=${v#${v%%[!0]*}}; p=${p#${p%%[!0]*}} # strip leading zeros
grep -il "^PRODUCT=$v/$p" /sys/bus/usb/devices/*:*/uevent |
sed s,uevent,, |
xargs -r grep -r '^DEVNAME=' --include uevent
}
find_by_id 04f2:b573
私の既存のHuawei携帯電話は2つのシリアルttyとして表示されます。
$ find_by_id 12d1:
/sys/bus/usb/devices/3-1:1.0/ttyUSB0/tty/ttyUSB0/uevent:DEVNAME=ttyUSB0
/sys/bus/usb/devices/3-1:1.1/ttyUSB1/tty/ttyUSB1/uevent:DEVNAME=ttyUSB1
最後のgrepを次のように変更できます。
xargs -r egrep -rB2 '^DEVNAME=|^IFINDEX=' --include uevent
USBネットワークインターフェースも見つけるには:
$ find_by_id 0e8d:
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent-INTERFACE=usb0
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent:IFINDEX=10
$ find_by_id 03f0:
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MAJOR=180
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MINOR=1
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent:DEVNAME=usb/lp1
答え2
/sys/bus/usb/devicesにシンボリックリンクが含まれているため、@mosvyの答えはDebianシステムでは機能しません。また、grep -R
ファイルシステムにシンボリックリンクループが含まれているため、シンボリックリンクをたどる方法では機能しません。
欲しいものを入手する簡単な方法は次のとおりです。
lsusb | grep NameOfYourDevice | sed -nr 's|Bus (.*) Device ([^:]*):.*|/dev/bus/usb/\1/\2|p'
lsusb (usbutils パッケージの) 出力を /dev/bus/usb/... パスに変換します。
ブロック/文字デバイス名が必要な場合は、次のようにしてください。
device() {
v=${1%:*}; p=${1#*:}
for dir in `find /sys/ -name idVendor | rev | cut -d/ -f 2- | rev`; do
if grep -q $v $dir/idVendor; then
if grep -q $p $dir/idProduct; then
find $dir -name 'device' | rev | cut -d / -f 2 | rev
fi
fi
done
}
答え3
すべての* unixシステムで動作しているかどうかはわかりません。ただし、マイコンピュータでは/dev/bus/{BUSID}/{DEVICEID}
バスIDとデバイスIDにアクセスできますlsusb
。