WSL2搭建基于Docker的ESP32開發環境
WSL2 安裝
sudo apt install esptool
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
Docker安裝和配置
一鍵安裝腳本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
配置
cat /etc/docker/daemon.json
{
"registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug": true,
"experimental": false
}
sudo systemctl daemon-reload
sudo systemctl restart docker
測試Docker
sudo docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
Digest: sha256:ec153840d1e635ac434fab5e377081f17e0e15afab27beb3f726c3265039cfff
Status: Image is up to date for hello-world:latest
docker.io/library/hello-world:latest
sudo docker run hello-world
[sudo] password for cmf:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
設置以非 root 用戶身份管理 Docker
創建docker組。
sudo groupadd docker
將您的用戶添加到docker組。
sudo usermod -aG docker $USER
注銷并重新登錄WSL2,在Windows Cmd下執行。
wsl --shutdown
還可以運行以下命令來激活對組的更改:
newgrp docker
驗證是否可以在沒有sudo的情況下運行命令。
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
拉取Docker鏡像
cat docker-compose.yml
version: "3.8"
services:
esp-idf:
image: espressif/idf
container_name: esp-idf-builder
working_dir: /project
volumes:
- .:/project
environment:
- HOME=/tmp
- IDF_GIT_SAFE_DIR=/project
tty: true
stdin_open: true
docker compose up
VsCode
需要安裝的插件
- Dev Containers
- Remote Development
- ESP-IDF
Code
git clone https://github.com/espressif/esp-idf.git
使用hello_world為示例工程
cp -rf esp-idf/examples/get-started/hello_world .
使用vscode打開hello_world工程
cd hello_world
code .
在VsCode的菜單欄選擇 查看 > 命令面板,在彈出的對話框中輸入ESP-IDF: Add docker container configuration。
然后當前項目的 .devcontainer 文件夾就會自動生成了。下一步在點擊左下角的連接->在容器中重新打開。


在 Docker 容器中使用外部 USB 轉串口設備
Windows中下載并安裝usbipd-win工具

dmesg可以看到wsl2中已經識別到了一個ttyACM0,這時我們在回到VsCode。

在下面一行配置中,串口配置端口就選擇ttyACM0,設備目標自行根據開發板選擇,然后就可以點擊Build Project,看我這里編譯成功了!
接下載再試試燒錄。

我選擇的用UART燒錄,看打印信息是燒錄成功了,具體我們點擊Monitor Devict試下。

優雅!

浙公網安備 33010602011771號