USBプロトコルアナライザは、なぜか高価なので、Raspberry Pi 4 Model Bにusb-proxyを組み合わせて代用する。
------------ ----------------------------------------------- -----------------------
| | | | | |
| | |------------- -----------| |------------- |
| USB <-----> USB | Host COMPUTER | USB <-----> USB | USB |
| device | | host port | running usb-proxy | OTG port | | host port | Host |
| | |------------- with raw-gadget -----------| |------------- |
| | | | | |
------------ ----------------------------------------------- -----------------------
必要な物
- Raspberry Pi 4 Model B
- OSインストール用のSDカード or USBメモリ(https://gadgetrip.jp/2021/05/raspberry_pi4_usb_boot/)
- USB type AとCのケーブル
- ホストPC(OTG portがtypeCなのでtypeCのポートか変換ケーブルが必要)
Raspberry Pi 4を使えるようにする
OS: Raspberry Pi OS Lite (64bit)
sudo apt update
sudo apt upgrade -y
sudo apt install git -y
sudo apt install raspberrypi-kernel-headers
OTGポート(typeC)を利用できるようにする
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
echo "dwc2" | sudo tee -a /etc/modules
sudo reboot
raw-gadgetのインストール
git clone https://github.com/programmer-princhan/raw-gadget.git
cd raw-gadget/raw_gadget/
make
sudo ./insmod.sh
cd
usb-proxyのインストール
git clone https://github.com/AristoChen/usb-proxy.git
cd usb-proxy/
sudo apt install libusb-1.0–0-dev
sudo apt install libjsoncpp-dev
make
中継させるUSB Deviceのチェック
- Vendor ID と Product ID を調べる。
$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 062a:4101 MosArt Semiconductor Corp. Wireless Keyboard/Mouse
Bus 001 Device 004: ID 16c0:04d2 Van Ooijen Technische Informatica Kazane+
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
usb-proxyの実行
- 中継させる USB Device は –vendor_id と –product_id の2つのオプションで指定する。
- USB Host が接続される UDC (USB Device Controller) を指定する必要がある。
- –device と –driver の2つのオプションは、Raspberry Pi 4 Model Bの場合、どちらも fe980000.usb を指定する。
# For device name
$ ls /sys/class/udc/
fe980000.usb
# For driver name
$ cat /sys/class/udc/fe980000.usb/uevent
USB_UDC_NAME=fe980000.usb
- usb-proxy のコンソール出力も参考になる。
cd ~/raw-gadget/raw_gadget/
sudo ./insmod.sh
cd ~/usb-proxy
sudo ./usb-proxy --device=fe980000.usb --driver=fe980000.usb --vendor_id=16c0 --product_id=04d2
USB パケットキャプチャ
sudo modprobe usbmon
sudo apt install tcpdump
- コンソールに表示
sudo tcpdump -i usbmon1 -X
- 保存する場合
sudo tcpdump -i usbmon1 -w usb.pcap
ref.
- https://github.com/AristoChen/usb-proxy