USB support to WSL2
https://github.com/rpasek/usbip-wsl2-instructions
https://github.com/cezanne/usbip-win
https://snowstar.org/2020/06/14/wsl2-usb-via-usbip/
WSL のカーネルをカスタムしてUSB デバイスにアクセスしてみました。
$ uname -r -v |
環境
- セキュアブート無効
- Windows 10 Insider Preview Build 20161
- usbip-win 0.3.0
- WSL2 (Ubuntu 20.04 LTS)
構築(Windows 10)
USBIP-WIN のインストール
- ファイルのダウンロード
https://github.com/cezanne/usbip-win/releases
usbip-win 0.1.0 のAssets からダウンロード - 証明書のインポート
usbip_test.pfx
をダブルクリック- パスワードは「usbip」
- 保存場所はローカルコンピュータ
- 以下の2つの証明書ストアに繰り返して配置
- 信頼されたルート証明機関
- 信頼された発行元
- テスト署名されたドライバーの読み込みの有効化
>bcdedit.exe /set TESTSIGNING ON
- 以下のメッセージが表示された場合はセキュアブートの無効化を実行する。
要素データ設定中にエラーが発生しました。
この値はセキュアブートポリシーによって保護されているため、変更 または削除できません。 - USB 一覧の表示と転送
マスストレージデバイス(busid = 1-112)の場合>usbip.exe list -l
- busid 1-112 (0bda:0169)
Realtek Semiconductor Corp. : Mass Storage Device (0bda:0169)
>usbip.exe bind -b 1-112
usbip: info: bind_device: bind device on busid 1-112: complete
> usbipd.exe -d -4 - ファイアウォールの許可(TCP port 3240)の問い合わせがあったら許可する。
構築(WSL)
カーネルのビルド
- ビルド用パッケージのインストールと現在のカーネルバージョンの確認
$ sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool
$ uname -r
4.19.104-microsoft-standard - カーネルのソースコード取得
$ sudo git clone https://github.com/microsoft/WSL2-Linux-Kernel.git /usr/src/4.19.104-microsoft-standard
$ cd /usr/src/4.19.104-microsoft-standard
$ sudo git checkout v4.19.104
$ sudo cp /proc/config.gz config.gz
$ sudo gunzip config.gz
$ sudo mv config .config
$ sudo make menuconfig - オプション選択
Device Drivers->USB support[*]
Device Drivers->USB support->Support for Host-side USB[M]
Device Drivers->USB support->Enable USB persist by default[*]
Device Drivers->USB support->USB Modem (CDC ACM) support[M]
Device Drivers->USB support->USB Mass Storage support[M]
Device Drivers->USB support->USB/IP support[M]
Device Drivers->USB support->VHCI hcd[M]
Device Drivers->USB support->VHCI hcd->Number of ports per USB/IP virtual host controller(8)
Device Drivers->USB support->VHCI hcd->Number of USB/IP virtual host controllers(1)
Device Drivers->USB support->USB Serial Converter support[M]
Device Drivers->USB support->USB Serial Converter support->USB FTDI Single Port Serial Driver[M]
Device Drivers->USB support->USB Physical Layer drivers->NOP USB Transceiver Driver[M]
Device Drivers->Network device support->USB Network Adapters[M]
Device Drivers->Network device support->USB Network Adapters->[Deselect everything you don't care about]
Device Drivers->Network device support->USB Network Adapters->Multi-purpose USB Networking Framework[M]
Device Drivers->Network device support->USB Network Adapters->CDC Ethernet support (smart devices such as cable modems)[M]
Device Drivers->Network device support->USB Network Adapters->Multi-purpose USB Networking Framework->Host for RNDIS and ActiveSync devices[M] - ビルド(6 多重で実行)
sudo make -j 6 && sudo make modules_install -j 6 && sudo make install -j 6
cd tools/usb/usbip
sudo ./autogen.sh
sudo ./configure
sudo sed 's/-Werror//g' -i Makefile
sudo sed 's/-Werror//g' -i src/Makefile
sudo sed 's/-Werror//g' -i libsrc/Makefile
sudo make install -j 6
sudo cp libsrc/.libs/libusbip.so.0 /lib/libusbip.so.0 - USB 有効化スクリプトの作成
$HOME/startusb.sh
sudo modprobe usbcore
sudo modprobe usb-common
sudo modprobe hid-generic
sudo modprobe hid
sudo modprobe usbnet
sudo modprobe cdc_ether
sudo modprobe rndis_host
sudo modprobe usbserial
sudo modprobe usb-storage
sudo modprobe cdc-acm
sudo modprobe ftdi_sio
sudo modprobe usbip-core
sudo modprobe vhci-hcd
echo $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}') - 実行権限付与
$ sudo chmod +x startusb.sh
- カーネルのコピー
$ cp /usr/src/4.19.104-microsoft-standard/vmlinux /mnt/c/Users/<username>/
構築(Windows 10)
WSL のカーネルファイル指定
- WSL のカーネル指定
C:\Users\ユーザ名\.wslconfig [WSL2]
kernel=C:\\Users\\<username>\\vmlinux - WSL のシャットダウン(再起動)
>wsl --shutdown
構築(WSL)
カーネルの確認とUSB アクセス
- カーネルの確認とUSB デバイスの参照
$ uname -r -v
4.19.104-microsoft-standard #1 SMP Mon Jul 6 18:00:19 JST 2020
$ ./startusb.sh
$ sudo usbip attach --remote=192.168.11.2 --busid=1-112
$ sudo dmesg
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Comment