kakepro’s blog

プログラムとかPC周りのことを書いていきます

WSL2からUSBデバイスを使用する

WSL2からUSBデバイスが使えるようになったとのことで、試してみる。

自分用メモなので細部は適当。

 

【環境】

Windows 10 Home 21H2

WSL2

Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz

 

【作業】

#PowerShell(管理者として実行)
Linuxディストリビューションのインストール
wsl --install -d Ubuntu-18.04

 

#WSL
カーネルバージョン確認
uname -a

f:id:kakepro:20220220150215p:plain

カーネルバージョンの確認

#PowerShell
カーネルが古い場合(WSL2 kernel 5.10.60.1 以上なら飛ばしてOK)のみ下記実行
wsl --update

#PowerShell
・WSL1 or 2の確認
wsl -l -v

・WSL1の場合、下記コマンドでWSL2に変更
wsl --set-version Ubuntu-18.04 2

 

#Windows

・usbipd-winのインストール
URL:https://github.com/dorssel/usbipd-win/releases

ダウンロードしたインストーラ(.msi)を実行

 

#WSL
$ sudo apt install linux-tools-5.4.0-77-generic hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

#PowerShell
USB機器のアタッチと確認
usbipd wsl list

f:id:kakepro:20220220150603p:plain

usbipd listでのUSBデバイスの確認

・USBデバイスの確認

usbipd wsl list

・USBデバイスのアタッチ
usbipd wsl attach --busid 2-2*1*2

 

#WSL
lsusb

f:id:kakepro:20220220151023p:plain

lsusb

ここまででWSLからUSBデバイスが見えるようになっているが、WSLからArduinoを起動してみると下図のようにシリアルポートがグレーアウトされている。

f:id:kakepro:20220220151147p:plain

Portのグレーアウト

WSL2からArduinoに書き込みができるようにカーネルのリビルドを実行

#WSL
・下準備
$ sudo apt install build-essential flex bison libssl-dev libelf-dev dwarves libncurses-dev
$ git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
$ cd WSL2-Linux-Kernel

・menuconfigの設定
$ make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl
>>>
-> Device Drivers
  -> USB support (USB_SUPPORT [=y])
    -> USB Serial Converter support (USB_SERIAL [=y])   から
USB CP210X Family of...を有効化する

=>save=>exit

カーネルのリビルド
$ make -j4 KCONFIG_CONFIG=Microsoft/config-wsl

ビルドイメージをWindowsにコピー(usernameは個々人の環境に合わせること)

$ cp arch/x86/boot/bzImage /mnt/c/Users/username/wsl_kernel

・.wslconfigの編集(usernameは個々人の環境に合わせること)

$ vim /mnt/c/Users/username/.wslconfig
***vimで書き込む内容
[wsl2]
kernel = C:\\Users\\username\\wsl_kernel
***ここまで

 

PowerShell

・一度WSLをシャットダウン
wsl --shutdown

 

#WSL

・CONFIG_USB_SERIAL_CP210Xの有効化の確認
$ zcat /proc/config.gz | grep CONFIG_USB_SERIAL_CP210X
>>>
CONFIG_USB_SERIAL_CP210X=y

 

#PowerShell

usbipd wsl attach --busid 2-2でデバイス追加

#WSL

$ ls -l /dev/ttyUSB0
でttyUSB0が表示されればOK

f:id:kakepro:20220220151839p:plain

USBデバイスの確認

ArduinoIDEのPortも有効化されている

f:id:kakepro:20220220151802p:plain

ArduinoIDE Portの有効化

【参考】

https://docs.microsoft.com/ja-jp/windows/wsl/connect-usb

qiita.com

 

*1:usbipd: error: The specified WSL distribution is not running.が表示される場合:
wsl --set-default Ubuntu18.04
で解決できる

*2:WSLが起動していないと図のようにエラーが出る