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

 

vEthernetのIPアドレスの固定化

WSL2のIPアドレスはvEthernetでDHCPで割り振られます。

vEthernetのIPアドレスは172.x.x.xでサブネットも自動で設定されます。

すでに外部マシンからWSL2にアクセスできることは確認しているので固定化する方法は必要ないけど、どうしてもIPアドレスが外部ネットワークと被さってどうしようもないときは次の方法でIPアドレスを変更します、または、固定化します。

PowerShellでGet-NetAdapterを実行する。

PS C:\WINDOWS\system32> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
イーサネット               Intel(R) Ethernet Connection (7) I...#2      23 Up           XX-XX-XX-XX-XX-XX         1 Gbps
Bluetooth ネットワーク... Bluetooth Device (Personal Area Netw...      17 Disconnected XX-XX-XX-XX-XX-XX         3 Mbps
vEthernet (WSL)           Hyper-V Virtual Ethernet Adapter             25 Up           XX-XX-XX-XX-XX-XX        10 Gbps

ここで表示されたifindexを用いてNew-NetIPAddress でIPアドレスを追加してIPアドレスを固定化することができます。

PS C:\WINDOWS\system32> New-NetIPAddress -IPAddress 192.168.2.1 -PrefixLength 24 -InterfaceIndex 25

IPAddress         : 192.168.2.1
InterfaceIndex    : 25
InterfaceAlias    : vEthernet (WSL)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.2.1
InterfaceIndex    : 25
InterfaceAlias    : vEthernet (WSL)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : PersistentStore

ipconfigを見ると次のように自動で割り振られた172.20.16.1のほかに192.168.2.1が同時に追加されていることが確認できます。

C:\Users\hidemi>ipconfig

Windows IP 構成

イーサネット アダプター vEthernet (WSL):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: XXXX::XXXX:XXXX:XXXX:XXXX%25
   IPv4 アドレス . . . . . . . . . . . .: 172.20.16.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   IPv4 アドレス . . . . . . . . . . . .: 192.168.2.1
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .:

WSL2のIPアドレスを変更するのはUbuntuのIPアドレスの設定を行います。

write: 2022/01/16/ 00:00:00