WLS2でNerves Livebookをやろう!
今回はラズパイ4を使います。
WSL2から fwup
コマンドでDLしたファームウェアをSDカードに書き込むのが、本記事のゴールです。
NERVES_SERIAL_NUMBER='nako' NERVES_WIFI_SSID='your_ssid' NERVES_WIFI_PASSPHRASE='your_password' fwup nerves_livebook_rpi4.fw
WindowsにWSL2(ubuntu)のインストールが終わっている前提でやっていきます。
[WSL2上]ファームウェアをDLする
releaseページからfwup用ファイルをDLする。
私はラズパイ4で使いたいので下記ファイルをDL。
nerves_livebook_rpi4.fw
[WSL2上]fwupコマンドのインストール
asdfインストール
公式を読みつつasdfのインストールをする。
curl -OL https://github.com/asdf-vm/asdf/releases/download/v0.16.7/asdf-v0.16.7-linux-amd64.tar.gz
sudo tar -C /usr/local -xzf asdf-v0.16.7-linux-amd64.tar.gz
$PATHが通ってるディレクトリに移動
このあたりは好みで
sudo cd /usr/local/asdf /usr/local/bin
fwupインストール
asdfにfwupプラグインを追加(この時点ではまだインストール終わってない)
sudo apt-get install autoconf pkg-config help2man libconfuse-dev libarchive-dev
asdf plugin add fwup https://github.com/fwup-home/asdf-fwup.git
asdf current fwupでインストールコマンドを確認
asdf current fwup
Name Version Source Installed
fwup 1.13.0 /home/nako/.tool-versions false - Run `asdf install fwup 1.13.0`
asdfでfwupをインストール
asdf install fwup 1.13.0
fwup --version # インストールされていることを確認
[Windows側]fwupインストール
パッケージマネージャchocolateyのインストール
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Windowsにfwupインストール
choco install fwup
WSL2からSDカードに書き込む
WSL2でUSBを認識できるよう、usbipd-winパッケージをインストール
WSL2はそのままだとUSBポートを認識できないので、usbipd-winパッケージをインストールする。
インストーラか、powershellでインストールできる。
winget install --interactive --exact dorssel.usbipd-win
USBを認識できるようにする(バインド、アタッチ)
powershellを管理者権限で実行する。
> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-6 30c9:0042 Integrated Camera Not shared
1-10 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared
1-13 2537:1081 USB 大容量記憶装置 Not shared
バインドする(この時点ではWindows側からUSBが認識できている)
usbipd bind --busid 1-13
ここからは管理者権限でなくてもOK
> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-6 30c9:0042 Integrated Camera Not shared
1-10 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared
1-13 2537:1081 USB 大容量記憶装置 Shared
アタッチする(Windows側からUSBポートが認識できなくなる)
usbipd attach --wsl --busid 1-13
アタッチされていることを確認
> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-6 30c9:0042 Integrated Camera Not shared
1-10 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared
1-13 2537:1081 USB 大容量記憶装置 Attached
必要に応じて、セキュリティソフトにusbipdを許可するルール追加
これは参考程度に
WSL2からSDカードに書き込みを試す
NERVES_SERIAL_NUMBER='nako' \
NERVES_WIFI_SSID='your_ssid' \
NERVES_WIFI_PASSPHRASE='your_password' \
fwup nerves_livebook_rpi4.fw
Use 15.63 GB memory card found at /dev/sde? [y/N] y
100% [====================================] 60.48 MB in / 69.90 MB out
Success!
Elapsed time: 7.705 s
これでSDカードにnerves livebookが書き込めました、やったね!
書き込めないとき
下記エラーメッセージが表示されている場合、書き込み権限がない可能性がある。
Use 15.63 GB memory card found at /dev/sde? [y/N] y
fwup: Error determining the size of /dev/sde
fwup: Cannot open '/dev/sde' for output.
Check file permissions or the read-only tab if this is an SD Card.
書き込み権限を付与する。
sudo chmod 666 /dev/sde
参考
ElixirでIoT#4.1.1:WSL 2でNerves開発環境を整備する
WSL2へUSBデバイス共有、usbipd-win 4