USB support to WSL2 Created 2020-07-06 | Updated 2020-07-06
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 4.19.104-microsoft-standard $ 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
環境
セキュアブート無効
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 (0 bd a:0169 ) Realtek Semiconductor Corp. : Mass Storage Device (0 bd a: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 #!/bin/bash sudo modprobe usbcoresudo modprobe usb-commonsudo modprobe hid-genericsudo modprobe hidsudo modprobe usbnetsudo modprobe cdc_ethersudo modprobe rndis_hostsudo modprobe usbserialsudo modprobe usb-storagesudo modprobe cdc-acmsudo modprobe ftdi_siosudo modprobe usbip-coresudo modprobe vhci-hcdecho $(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) カーネルの確認とUSB アクセス
カーネルの確認とUSB デバイスの参照
$ uname -r -v 4.19.104-microsoft-standard $ ./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