WSL2の仮想ストレージを最適化する

WSL2の仮想ストレージは一度、確保されてしまうと大きいサイズのままになってしまいます。

そのため、適宜、最適化をしてサイズを小さくするとよいです。

まず、Power ShellでWSL2を止めます。

wsl --shutdown

つぎにdiskplatを立ち上げます。

diskpart

WSL2の仮想ストレージはC:\Users\hidemi\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxx\LocalStateの下にext4.vhdxというファイル名で存在するのでそれを選択してcompactコマンドで最適化します。

select vdisk file="C:\Users\hidemi\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxx\LocalState\ext4.vhdx"
compact
exit

間違えて、Vivado 2021.2をWSL2の仮想ストレージにインストールしたらローカルディスクがいっぱいになってしまいました。

write: 2022/01/21/ 00:00:00

 

MACアドレスの変更

MACアドレスを使うノードロックなライセンスなどの場合、WSL2の自動でMACアドレス割り振りだとちょっと不便があります。

次のようにMACアドレスを変更することができます。

$ sudo macchanger -m 00:15:5d:XX:XX:XX etn0
Current MAC:   00:15:5d:XX:XX:XX (Microsoft Corporation)
Permanent MAC: 00:15:5d:XX:XX:XX (Microsoft Corporation)
New MAC:       00:15:5d:XX:XX:XX (Microsoft Corporation)

現在のMACアドレスから新しいMACアドレスに変更されたことが表示されます。

MACアドレスの変更はPortをDownしておかなければいけないので、手順としてはつぎのようにDownしてMACアドレスを変更して、再度Upになります。

$ sudo ip link set dev eth0 down
$ sudo macchanger -m 00:15:5d:XX:XX:XX eth0
$ sudo ip link set dev eth0 up

MACアドレスの変更はできるものの、これをやってしまうとネットワークアクセスできなくなるので注意が必要です。

MACアドレスを自動割り振りのMACアドレスに戻すには次のように実行します。

$ sudo ip link set dev eth0 down
$ sudo macchanger -p eth0
$ sudo ip link set dev eth0 up
$ sudo ip route add default via <vEthernet's IP> dev eth0

Interface Down時にDefault Gatewayが消えるので再設定が必要です。

write: 2022/01/20/ 00:00:00

 

WSL2からArty-A7へ接続

Arrty-A7への接続は使っている最中に電源を落とすことがあります。

そうするとUSB接続が切れるので必然的にWSL2と繋げたUSBの設定も消えることになります。

その都度、コマンドを入力するのは面倒なのでArty-A7の電源を入れるたびに実行するバッチファイルを用意します。

まずはPower Shell上でattachするスクリプトを作成します。

管理者権限で起動できるようにしておきます。

ファイル名はusb.ps1です。

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }

usbipd wsl attach --busid 1-2

次のようにPower ShellのスクリプトとudevのReStartするバッチファイルを用意します。

powershell.exe -File C:\Users\hidemi\bin\usb.ps1

wsl -d Ubuntu-20.04 -u root --exec /bin/bash service udev stop
wsl -d Ubuntu-20.04 -u root --exec /bin/bash service udev restart

バッチファイルのショートカットを作成して、管理者権限で実行できるようにしてデスクトップにでも置いておけばArty-A7の電源をOff/Onしたときにショートカットをクリックするだけで再度、WSL2でArty-A7を認識することが出きます。

write: 2022/01/19/ 00:00:00

 

WSL2のVivadoからArty-A7に接続

WSL2に接続したArtyt-A7へWSL2のVivadoからアクセスします。

Arty-A7をUSBデバイスでattachできているところまでは完了していることとします。

Xilinx社のdriverインストール

WSL2にXilinx社のdriverを次のようにインストールします。

ここはnative Linuxと同様の作業です。

$ /opt/Xilinx/Vivado/2021.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
$ sudo ./install_drivers

udevを起動

USBデバイスをattachしてそのままWSL2のVivadoからHardware Managerを開いてもVivado(hw_server)からArty-A7に接続することはできません。

原因はudevが起動していないようなのです。

WSL2のsystemdはPIDが1じゃないのが起因していて、systemdのPIDを1にするgenieがあるのですがWSL2の仕様がバージョンごとに変わる可能性があるのでここでは定常的にsystemのPIDを1にするのは避けます。

udevは毎度、起動すればいいだけなのでWSL2の起動時に次を実行します。

$ sudo service udev start

これでudevが起動できるのでこの後にVivadoを起動して、Hardware Managerを立ち上げればArty-A7を認識します。

Arty-A7の電源On/Off時は再度、attachが必要

Arty-A7とかUSB接続の評価ボードの電源をOn/Offする機会多々あります。

その場合、attachしたUSB接続が切れてしまうので、再接続後にattachしてあげる必要があります。

write: 2022/01/18/ 00:00:00

 

WSL2でUSBデバイスの接続

Microsoft社の「USB デバイスを接続する」を参考にするとWSL2でもUSBデバイスにアクセスできるようになります。

USBIPD-WINのインストール

下記からWindows側にusbipd-winをインストールします。

現時点では1.3.0をインストールしました。

https://github.com/dorssel/usbipd-win/releases

uspbipなどをインストール

今度はWSL2側にusbipdなどをインストールします。

$ sudo apt install linux-tools-5.4.0-77-generic hwdata

/etc/sudoersにsecure_path=/usr/lib/linux-tools/5.4.0-77-generic:/usr/local/sbinを追加します。

下記のようなにします。

Defaults        secure_path="/usr/lib/linux-tools/5.4.0-77-generic:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

現時点でWSL2のLinux Kernelはv5.10.60なのに5.4.0-77のツールを入れているのは気にしないでおきましょう。

USBデバイスをattach

PowerShellを管理者モードで起動して、次のようにUSBデバイスを確認します。

PS C:\WINDOWS\system32> usbipd wsl list
BUSID  DEVICE                                                        STATE
1-2    USB Serial Converter A, USB Serial Converter B                Not attached
1-6    USB 入力デバイス                                                    Not attached
3-1    Generic Bluetooth Radio                                       Not attached
3-2    USB 入力デバイス                                                    Not attached
3-3    USB 入力デバイス                                                    Not attached
3-4    Jabra SPEAK 510 USB, USB 入力デバイス                               Not attached

ここでBUSIDの1-2に表示されているUSB Serial Converter A, USB Serial Converter BはDigilent社のArty-A7です。

つぎのようにattachします。

PS C:\WINDOWS\system32> usbipd wsl attach --busid 1-2

attach前はWSL2側で次のように見えています。

hidemi@nereid:~$ 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

attach後、次のようにFTDIのデバイスが増えています。

hidemi@nereid:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
write: 2022/01/17/ 00:00:00