VSCode & PlatformIO启动!WSL×嵌入式开发环境构建的完整指南

日本語|English|中国语
| 4 min read
Author: shuichi-takatsu shuichi-takatsuの画像
Information

为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。

至今为止,我已在以下文章中介绍了使用 VSCodePlatformIO 进行嵌入式软件开发的方法。

那么,今天的主题是「在 WSL(Ubuntu)中安装 PlatformIO,构建嵌入式软件开发环境」。
我设想最终的构建效果如下:

预先假设你已经在 Windows 上完成了 VSCode 的安装。

构建步骤如下:

  • 利用 WSL 在 Windows 上安装 Ubuntu24.04
  • 在 VSCode 中安装扩展功能(WSL 或 Remote Development)
  • 在 VSCode 中连接到 WSL
  • 在 WSL 上安装 PlatformIO
  • 使 WSL 识别 USB(使用 Usbipd-WIN)
  • 从 WSL(上面的 PlatformIO)向 Arduino 上传程序

那么,马上开始实践吧。

准备 WSL(Ubuntu)

#

WSL(Windows Subsystem for Linux)是一种可以在 Windows 上运行 Linux 环境的功能。
使用 WSL 可以在 Windows 上轻松搭建 Linux 环境。

关于如何通过 WSL 在 Windows 上安装 Linux(Ubuntu)的步骤,请参见这篇文章
不过这次不需要安装 Docker。

在 VSCode 中安装扩展功能「WSL」或「Remote Development」

#

软件开发本身是在安装在 Windows 上的 VSCode 中进行的。
为了从 VSCode 连接到 WSL,我们使用扩展功能「WSL」。

今后如果需要通过 SSH 连接或在 Docker 容器中进行开发,建议安装扩展功能「Remote Development」。

安装了「Remote Development」扩展功能后,会同时安装以下四个扩展功能:

  • WSL(本篇文章中使用的扩展功能)
  • Remote - SSH
  • Dev Containers
  • Remote - Tunnels

安装扩展功能后,VSCode 左侧面板中会增加「远程资源管理器」。

在 VSCode 中连接到 WSL

#

点击 VSCode 左下角的「打开远程窗口」,然后选择「连接到 WSL」。

连接完成后,VSCode 左下角的显示将变成如下样子。(连接的 WSL 为 Ubuntu24.04时)

在 WSL 上安装 PlatformIO

#

无论 PlatformIO 安装在 WSL 上还是本地环境中,其安装方法都是一样的。
在 VSCode 已连接到 WSL 的状态下(★这里重要),安装 VSCode 的扩展功能「PlatformIO IDE」。

如果 PlatformIO 正确安装在 WSL 端,扩展功能图标的右下角会出现一个标记,表明安装目标为远程端。
此外,还会显示当前激活扩展功能所在的 WSL 环境信息。

使 WSL 识别 USB

#

现在,这里遇到一个问题。
虽然将 Arduino 微控制器连接到宿主 PC 后,通过 USB-COM 端口上传程序,但本次开发环境位于 WSL 上的 Ubuntu。

「如何让 WSL(Ubuntu)识别宿主 PC 上的 USB 呢?」

在 VirtualBox 等虚拟环境中,只需设置即可使 USB 设备被识别,但现在可不想放弃 WSL 或引进其他环境。
有没有办法让 USB-COM 端口在 WSL(Ubuntu)中得到识别呢?
经过各种查询,我在微软网站上发现了这样的信息
如果使用该网站上介绍的 usbipd-win,问题似乎可以得到解决。
从上述网站下载最新版本并安装到宿主 PC 上。

安装应用后,用以下命令显示 USB 设备列表。

usbipd list

在我的环境中,显示了以下 USB 设备列表。

随后,在将 Arduino 微控制器连接到宿主 PC 后,再次获取 USB 设备列表。
这时,会看到设备数量增加了一个。
看来,这个 BUSID「3-2」就是当 Arduino 微控制器连接时生成的 USB 设备。

那么,将用这个 BUSID 所指示的 USB 设备共享(绑定),以便在 WSL 中使用。
请以管理员权限启动 Powershell 或命令提示符,并执行以下命令。
(请根据各自环境将 BUSID 替换为相应值)

usbipd bind --busid 3-2

这样,STATE 部分会变为「Shared」,表明设备已被共享。

不过,在这种状态下,仍然不能在 WSL 中使用 USB 设备。
要使其可用,还需要进行分配(附加)。
接下来将 USB 设备附加给 WSL。
执行以下命令:

usbipd attach --wsl --busid 3-2

随后输出了如下日志。

在 USB 设备列表中可以确认,STATE 已变为「Attached」。

顺便一提,解除附加的命令如下:

usbipd detach --busid <busid>

另外,取消共享的命令如下:

usbipd unbind --busid <busid>

99-platformio-udev.rules 设置

#

另外,在 Linux 上使用 PlatformIO 时,需要进行之前文章中介绍的「99-platformio-udev.rules 设置」,因此在 WSL 上的 Ubuntu 中执行该设置。
(虽然上述文章中是针对 Rasbian(Raspberry Pi)的,但因为都是 Linux 系统,所以使用相同步骤进行设置即可)

从 WSL 上上传程序

#

到此为止,终于构建出了可以进行程序开发和上传的环境。
回想起来,似乎 USB 设备的设置竟比 PlatformIO 的配置更为繁琐。

向 Arduino 微控制器上传的程序使用的是一如既往的「L闪灯程序」。
该程序与这里中的内容相同。

点击上传按钮。

上传后,如果看到以下日志输出且 Arduino 微控制器的 LED 以1秒间隔闪烁,即表示上传成功。

附录(使用 GUI 操作 USB)

#

对于觉得通过命令行逐条进行 USB 共享或附加操作很麻烦的你,下面推荐一个 GUI 工具。
安装此工具后,可通过 GUI 进行 USB 共享、附加等操作。

操作界面如下:

总结

#

原本希望仅用 VSCode+WSL+PlatformIO 完全实现整个流程,但由于涉及 USB 设备的操作,部分情况下仍需要在 Windows 上安装额外应用。
不过,由于 usbipd-win 是微软网站上也介绍过的应用程序,所以姑且认为问题不大。
至此,我们构建了一个在不污染宿主 PC 环境的情况下,在 WSL 上的 Ubuntu 中进行嵌入式软件开发的环境。
今后还会介绍更多不同嵌入式设备的开发环境。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。