LoginSignup
6
4

More than 1 year has passed since last update.

Windows11 + WSL2 でUSBデバイスを認識させる

Last updated at Posted at 2022-05-03

概要

WSL2で動作しているUbuntu20.04でwindowsで認識したUSBデバイスを使えるようにする。

参考

前提

  • Windows 11 (ビルド 22000 以降)
  • x64/x86 プロセッサ(Intel or AMD)
  • WSL 2
  • Linux カーネル 5.10.60.1 以上が実行されている

手順

認識させたいディストリが既定に設定されてることを確認する。

> wsl --list
Linux  Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
Ubuntu-18.04
docker-desktop-data
docker-desktop

既定になってない場合は、既定に設定する。

> wsl --set-default <ディストリID>

usbipdをインストール

公式リポジトリ からmsiをダウンロードしてインストール。

windowsホストでバスIDを調べてWSL2にアタッチする

powershellを管理者権限で実行して以下を実行

> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-6    045e:0990  Surface Camera Front, Surface IR Camera Front                 Not attached
2-14   0411:023a  USB 大容量記憶装置                                             Not attached

バスIDを指定してデバイスをアタッチ

> usbipd wsl attach --busid 2-14

USBデバイスを取り外したい場合はでタッチを実行する

> usbipd wsl detach --busid 2-14

(option)カーネルをリビルドする

デフォルトだとUSBメディアがブロックデバイスとして認識されないので、オプションを追加してカーネルをリビルドする必要がある。

以下の手順をWSL2のUbuntuで実行する。

依存パッケージをインストール

$ sudo apt install -y \
    build-essential \
    git \
    flex \
    bison \
    libssl-dev \
    libelf-dev \
    pkg-config \
    libncurses-dev \
    dwarves

カーネルのソースをクローン

$ git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
$ cd WSL2-Linux-Kernel/
$ cp ./Microsoft/config-wsl .config
$ make menuconfig

コンソールで設定メニューが開くので、

Device Drivers -> USB support -> USB Mass Storage support

の順番で項目を探して、USB Mass Storage supportにチェックを入れる(スペースキーでチェック)
チェックを入れたらSaveしてExit

設定を変更出来たらビルドする

$ make -j $(nproc)

ビルドした vmlinux をWindowsホストにコピーする

$ sudo mkdir -p /mnt/c/wslkernel
$ sudo cp ./vmlinux /mnt/c/wslkernel/

ホストPCのユーザ直下に .wslconfig を作成して先ほど作成したカーネルを指定する

.wslconfig
[wsl2]
kernel=C:\\wslkernel\\vmlinux

WSL2をシャットダウン

> wsl --shutdown

ビルドしたカーネルドライバをインストール

$ sudo insmod ./drivers/usb/storage/usb-storage.ko

powershellからデバイスをアタッチするとUSBメディアが認識されるようになる。
以下の例だとsdfが対象のデバイス

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 331.6M  1 loop /mnt/wsl/docker-desktop/cli-tools
loop1    7:1    0 302.9M  1 loop
sda      8:0    0   256G  0 disk
sdb      8:16   0 339.8M  1 disk
sdc      8:32   0   256G  0 disk /
sdd      8:48   0   256G  0 disk /mnt/wsl/docker-desktop/docker-desktop-proxy
sde      8:64   0   256G  0 disk /mnt/wsl/docker-desktop-data/isocache
sdf      8:80   1  14.8G  0 disk
├─sdf1   8:81   1   499M  0 part
└─sdf2   8:82   1  14.3G  0 part
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4