Raspberry Pi のUSBを制御する
1. Spec
1-1. ハード面
アイテム | 詳細 |
---|---|
Raspberry Pi | Raspberry Pi 3 Model B+ |
1-2. ソフト面
内容 | バージョン |
---|---|
Raspberry Pi Imager | v1.6.2 |
Raspberry Pi OS (32-bit) | リリース日:2021-05-07 |
Kernel | 5.10 |
(補足)Raspbian | 10.10 |
2. lsusbコマンドについて
- USBデバイスの一覧と詳細情報を表示
lsusb
: USBデバイスを一覧表示する
pi@raspberrypi:~ $ lsusb
Bus 001 Device 008: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 007: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
バス番号 | デバイス番号 | ベンダーID | プロダクト番号 | ベンダー名 |
---|---|---|---|---|
Bus 001 | Device 008 | ID 0424 | 7800 | Standard Microsystems Corp. |
Bus 001 | Device 007 | ID 0424 | 2514 | Standard Microsystems Corp. USB 2.0 Hub |
Bus 001 | Device 002 | ID 0424 | 2514 | Standard Microsystems Corp. USB 2.0 Hub |
Bus 001 | Device 001 | ID 1d6b | 0002 | Linux Foundation 2.0 root hub |
ベンダー名は、Raspbianなので「/var/lib/usbutils/usb.ids」ファイルを参照する。
短いオプション | 長いオプション | 意味 |
---|---|---|
-s バス番号:デバイス番号 | 表示対象のバスとデバイスを10進数で指定する (どちらか片方の指定も可能:本文を参照) |
|
-d ベンダーID:プロダクト番号 | 表示対象のベンダーとプロダクトを16進数で指定する (ベンダーのみの指定も可能:本文を参照) |
|
-v | --verbose | 詳細情報を表示する |
-t | --tree | USBデバイスをツリーで表示する (「-v」や「-D」より優先される) |
-D デバイスディレクトリ | 「-D /dev/bus/usb/001/001」のように、/dev/bus/usb下のディレクトリを指定して表示する (「-v」同様の詳細表示となる、※1) |
※1 USBデバイスは「/dev/bus/usb/バス番号/デバイス番号」で管理されている。「-D」オプションを指定しない場合、lsusbコマンドは/dev/bus/usb/以下を走査して一覧表示する。
2. USBを制御するためのhub-ctrlを導入する
sudo apt-get install libusb-dev wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl
USBなのにLANがポート1にされているので、
USBとして使えるのはポート2~5。
Raspberry Pi 3B+ は、ポート毎にON-OFF出来ず、ポート2~5まとめてのON-OFFになる。
3. コマンドで制御
USBポートをOFFにするコマンドは、
sudo hub-ctrl -h 1 -P 2 -p 0
コマンド | 内容 |
---|---|
-h 1 | hub1をコントロール |
-P 2 | port2を指定 |
-p 0 | 0:電源OFF 1:電源ON |
-b 001 | BUS001をコントロール |
-d 005 | device005を指定 |
(他例)
sudo hub-ctrl -b 001 -d 005 -P 1 -p 0
ちなみに、Raspberry Pi 3B+ では
sudo hub-ctrl -h 0 -P 2 -p 0
では動きませんでした。
hubの指定だけではダメなようで、
sudo
で権限がないとコマンド使えませんでした。
また、./
があるものとないものの違いはよくわかりませんでした。
4. 参考にさせて頂いたサイト