WSL Ubuntu環境へのESP-IDFインストールとVS Code拡張機能の活用
1. はじめに
WSL(Windows Subsystem for Linux)の使いやすさが向上しており、Ubuntu環境を構築してESP-IDF(Espressif IoT Development Framework)をインストールし、ESP32の開発に利用できます。この記事では、WindowsのVS Codeから拡張機能を使ってWSLに接続し、ESP-IDFをインストールしてESP32-C6の開発を行う方法を解説します。
2. WSLのアップデート
現状のWSLのバージョンを確認します。
wsl --version
``` ```
WSL バージョン: 2.0.14.0
カーネル バージョン: 5.15.133.1-1
WSLg バージョン: 1.0.59
MSRDC バージョン: 1.2.4677
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.26100.2894
WSL 2.4.8以降では、TARベースのシンプルなWSLフォーマットが利用可能になるなどの機能向上がされています。最新版にアップデートするには、以下のコマンドを実行します。
https://forest.watch.impress.co.jp/docs/news/1660594.html
https://ubuntu.com/blog/ubuntu-wsl-new-format-available
wsl --update
``` ```
WSL バージョン: 2.4.10.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5716
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.2894
3. WSLへのディストリビューションインストール
3.1. 新フォーマット(TAR)でのインストール
WSLをアップデートしたため、tar形式のディストリビューションをインストール可能になりました。まだ、すべてのディストリビューションがtar形式に対応しているわけではありません。
今回は利用しませんが、tar形式に対応したUbuntu 24.04のディストリビューションを、UbuntuTestというディストリビューション名でインストールしてみます。
イメージの保存先は C:\project\wsl\ubuntutest とします。
wsl --install Ubuntu-24.04 --location "C:\project\wsl\ubuntutest" --name UbuntuTest
tar形式の場合には、--name オプションを利用することで、同じディストリビューションでも異なる環境としてインストールできます。旧形式の場合は --name オプションは使えません。
インストール後、以下のコマンドで確認できます。
wsl -l -v
``` ```
NAME STATE VERSION
* Ubuntu Stopped 2
rancher-desktop Stopped 2
rancher-desktop-data Stopped 2
docker-desktop Stopped 2
Ubuntu-24.04 Stopped 2
docker-desktop-data Stopped 2
UbuntuTest Stopped 2
テスト環境を削除する場合は、次のコマンドを実行します。
wsl --unregister UbuntuTest
インストール可能なディストリビューションは次のコマンドで確認できます。
wsl --list --online
``` ```
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
Ubuntu Ubuntu
Ubuntu-24.04 Ubuntu 24.04 LTS
kali-linux Kali Linux Rolling
openSUSE-Tumbleweed openSUSE Tumbleweed
openSUSE-Leap-15.6 openSUSE Leap 15.6
Debian Debian GNU/Linux
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
3.2. 旧フォーマットでのインストール
今回利用するUbuntu-22.04をインストールします。こちらは旧形式フォーマットのみのため、--name オプションが使えません。
よって、次の手順でインストールします。
- 通常通りUbuntu-22.04をインストール
- インストールしたUbuntu-22.04をtar形式でエクスポート
- エクスポートしたイメージを「esp-idf」というディストリビューション名でインポート
3.2.1. Ubuntu-22.04をインストール
wsl --install Ubuntu-22.04
wsl: レガシの配布登録を使用しています。代わりに tar ベースの配布を使用することを検討してください。
インストール中: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS がインストールされました。
Ubuntu 22.04 LTS を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: wohl
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Mon Feb 10 15:26:27 JST 2025
System load: 0.23 Processes: 66
Usage of /: 0.1% of 1006.85GB Users logged in: 0
Memory usage: 6% IPv4 address for eth0: 172.21.255.238
Swap usage: 0%
3.2.2. エクスポート
wsl --shutdown
wsl --export Ubuntu-22.04 "C:\project\wsl\image\Ubuntu-2204.tar"
3.2.3. esp-idfというディストリビューション名でインポート
wsl --import esp-idf "C:\project\wsl\espide" "C:\project\wsl\export\Ubuntu-2204.tar"
この操作を正しく終了しました。
``` ```
wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
rancher-desktop Stopped 2
rancher-desktop-data Stopped 2
esp-idf Stopped 2
docker-desktop Stopped 2
Ubuntu-24.04 Stopped 2
docker-desktop-data Stopped 2
3.3. ディストリビューションの起動
指定したディストリビューションを、指定したユーザーがログインした状態で起動します。
wsl -d ディストリビューション名 -u ユーザー名
3.3.1. デフォルトユーザー設定
起動時にユーザー設定を省略するとrootで起動してしまいます。
毎回、ユーザーを指定するのが面倒なため、デフォルトのユーザーを設定します。
sudo nano /etc/wsl.conf
``` ```
[user]
default=ユーザー名
一旦、WSLを終了します。
wsl --shutdown
ディストリビューションを起動します。
wsl -d ディストリビューション名
先ほど設定したユーザーでログインできているはずです。
4. WSLのディストリビューションに外部からアクセス可能にする
wslのデフォルトの設定では、外部からwslのディストリビューションにはアクセスできません。
ディストリビューションに割り振られるIPアドレスを確認してみます。
wsl hostname -I
172.21.255.238
以前はブリッジモードが使えていましたが、現在はブリッジネットワークモードは非推奨になったため、ミラーモードを利用します。
Windowsのカレントユーザーフォルダに.wslconfigファイルを作成し、次の内容を記述します。
[wsl2]
networkingMode=mirrored
ディストリビューションに割り振られるIPアドレスを確認します。
wsl hostname -I
169.254.83.107 192.168.1.29
ホストOS(Windows)と同じIPアドレスが割り振られており、外部からWindowsと同じIPでアクセスが可能になります。
ただし、ディストリビューションごとに設定を変えることはできず、すべてのディストリビューションで共通の設定になります。
5. WindowsのVS Codeに拡張機能をインストールする
WindowsのVS Codeを起動し、次の拡張機能をインストールします。
「Connect to WSL using Distro」でWSLの「esp-idf」に接続します。
その後、ターミナルを開き次のコマンドを実行します。
sudo apt update
sudo apt upgrade
依存関係をインストールします。
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
VS Codeの機能拡張「ESP-IDF」をインストールします。
6. ESP-IDFをインストールする
VS Codeのコマンドパレットに「ESP-IDF: Configure ESP-IDF Extension 」と入力します。
「Express 」を選択し、下図のように設定し、します。(パスは変更してください)
source $HOME/esp/v5.4/esp-idf/export.sh
動作するか確認する。
idf.py --version
7. USBをWSLに接続する
usbipd-winをWindowsにインストールします。
https://github.com/dorssel/usbipd-win/releases
Windowsに接続されているUSBデバイスの一覧を取得します。
usbipd list
``` ```
Connected:
BUSID VID:PID DEVICE STATE
2-1 303a:1001 USB シリアル デバイス (COM3), USB JTAG/serial debug unit Not shared
2-3 04f3:0c55 ELAN WBF Fingerprint Sensor Not shared
2-6 5986:211c HD Webcam Not shared
2-10 8087:0026 インテル(R) ワイヤレス Bluetooth(R) Not shared
2-14 0411:0333 USB 接続 SCSI (UAS) マス ストレージ デバイス Not shared
4-4 05e3:0749 USB 大容量記憶装置 Not shared
5-2 046d:c52b Logitech USB Input Device, USB 入力デバイス Not shared
5-3 046d:c545 LIGHTSPEED Receiver, USB 入力デバイス Not shared
6-1 056e:701e ELECOM 2MP Webcam, ELECOM Face Authentication Cam Not shared
6-2 056e:701f Webcam Internal Mic Not shared
ここで、開発ターゲットのESPはBUSID 2-1 に接続されていることがわかります。
BUSID 2-1をWSLに接続します。
usbipd bind --busid 2-1
``` ```
usbipd attach --wsl --busid 2-1
切断する場合には次のコマンドを実行します。
usbipd detach --busid 2-1
8. ESP-IDFでのビルド・フラッシュ・シリアルモニター
LED点滅のサンプルプログラムをビルドしてデバイスに書き込みます。
今回使用するデバイスは「esp32c6」です。
8.1. ビルド
cd ~/esp/v5.4/esp-idf/examples/get-started/blink
idf.py set-target esp32c6
``` ```bash
idf.py menuconfig
``` ```bash
idf.py build
8.2. フラッシュ
usbipdで接続したUSBがどのポートに割り当てられているか確認します。
dmesg | tail
``` ```bash
[ 617.652120] vhci_hcd: vhci_device speed not set
[ 617.723767] usb 1-1: new full-speed USB device number 2 using vhci_hcd
[ 617.805638] vhci_hcd: vhci_device speed not set
[ 617.877535] usb 1-1: SetAddress Request (2) to port 0
[ 617.916227] usb 1-1: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02
[ 617.916232] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 617.916235] usb 1-1: Product: USB JTAG/serial debug unit
[ 617.916238] usb 1-1: Manufacturer: Espressif
[ 617.916240] usb 1-1: SerialNumber: 9C:9E:6E:77:9E:DC
[ 617.918945] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
「ttyACM0 」ポートに割り当てられていることが確認できます。
実際に書き込みます。
idf.py -p /dev/ttyACM0 flash
8.3. シリアルモニター
idf.py -p /dev/ttyACM0 monitor



