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   -----------|     |-------------        |
|          |     |                                             |     |                     |
------------     -----------------------------------------------     -----------------------

必要な物

  1. Raspberry Pi 4 Model B
  2. OSインストール用のSDカード or USBメモリ(https://gadgetrip.jp/2021/05/raspberry_pi4_usb_boot/)
  3. USB type AとCのケーブル
  4. ホスト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