From 05d6bf83443b0b84be6642e54c3060b07ed1a9a9 Mon Sep 17 00:00:00 2001 From: pedrominatel Date: Thu, 31 Oct 2024 16:40:26 +0000 Subject: [PATCH] Editorial changes and added the author json file --- .../blog/espressif-devkits-with-wsl2/index.md | 90 ++++++++++++------- data/authors/jakub-kocka.json | 6 ++ 2 files changed, 64 insertions(+), 32 deletions(-) create mode 100644 data/authors/jakub-kocka.json diff --git a/content/blog/espressif-devkits-with-wsl2/index.md b/content/blog/espressif-devkits-with-wsl2/index.md index 4d8ac737a..f4be06299 100644 --- a/content/blog/espressif-devkits-with-wsl2/index.md +++ b/content/blog/espressif-devkits-with-wsl2/index.md @@ -1,77 +1,103 @@ --- -title: "Working with Espressif's devkits using WSL2" +title: "Working with Espressif's SoC's using WSL2" date: 2024-10-31 showAuthor: false -tags: ["ESP-IDF", "Windows", "WSL2"] authors: - - "jakub-kocka" + - jakub-kocka +tags: ["ESP-IDF", "devkit", "Windows", "WSL", "WSL2", "USB"] --- +Released in 2016 by Microsoft, the Windows Subsystem for Linux [(WSL)](https://learn.microsoft.com/en-us/windows/wsl/) is a feature that allows the use of a Linux environment with no need of a virtual machine, container or dual boot. The [WSL](https://learn.microsoft.com/en-us/windows/wsl/) is a great way to run Linux alongside Windows. + ## Introduction -[WSL](https://learn.microsoft.com/en-us/windows/wsl/) (Windows Subsystem for Linux) is a great way to run Linux alongside Windows. However, when there is a need to use it with Espressif's devkits, it can be a bit tricky due to the required serial port forwarding. In this short article, a step-by-step guide is provided to help you work with Espressif's devkits using WSL. +Developing ESP32's based software solutions with Windows can be, sometimes, overwhelming due to some characteristics of the OS that increases the build time in some configurations or security polices. + +To overcome, the WSL is an good option to optimize, specially the build time. However, when there is a need to use it with Espressif's SoCs with USB-CDC or external USB-to-Serial (`CP210x`, etc), it can be a bit more tricky due to the required serial port forwarding. + +In this article, a step-by-step guide is provided to help you work with Espressif's devkits using WSL. ### Alternatives -Many common operations (e.g., flashing, monitoring, etc. ) can be handled by the [esp_rfc2217_server](https://docs.espressif.com/projects/esptool/en/latest/esp32/esptool/remote-serial-ports.html?highlight=rfc) (Telnet) where the host Windows machine acts as the server and the WSL terminal acts as the client. However, tools like OpenOCD (Open On-Chip Debugger) cannot be used with this approach. +Many common operations (e.g., flashing, monitoring, etc. ) can be handled by the [ESP_RFC2217_server](https://docs.espressif.com/projects/esptool/en/latest/esp32/esptool/remote-serial-ports.html?highlight=rfc) (Telnet) where the host Windows machine acts as the server and the WSL terminal acts as the client. However, tools like [OpenOCD](https://openocd.org/) (Open On-Chip Debugger) cannot be used with this approach. -## Step-by-step Guide +## Guide -The following steps describe a serial port forwarding method for WSL using [usbipd-win](https://github.com/dorssel/usbipd-win). -It is assumed that the latest version of WSL is already installed. A detailed guide and troubleshooting can be found in [Microsoft documentation](https://learn.microsoft.com/en-us/windows/wsl/connect-usb). +The following steps describe a serial port forwarding method for WSL using [USBIPD-WIN](https://github.com/dorssel/usbipd-win). +It is assumed that the latest version of WSL2 is already installed. A detailed guide and troubleshooting can be found in [Microsoft documentation](https://learn.microsoft.com/en-us/windows/wsl/connect-usb). -(*tested with:* Windows 11 (23H2), usbipd-win 4.3.0) +(*tested with:* Windows 11 (23H2), USBIPD-WIN 4.3.0) ### 1. Install the USBIPD-WIN -Using package manager in the host terminal +Using package manager in the host terminal, run: - winget install usbipd +```bash +winget install usbipd +``` -Or download the .msi file from the [latest releases](https://github.com/dorssel/usbipd-win/releases). -After the installation the terminal will be needed to restart. +Or download the `.msi` file from the [latest releases](https://github.com/dorssel/usbipd-win/releases) and install it manually. -### 2. Attach a devkit +After the installation, the terminal must be restarted. -In the host terminal run +### 2. Attach the USB - usbipd list +With the devkit connected, in the host terminal, run: -For example the used devkit is ESP32-C6 (**1-1 is the BUSID** which will be needed in the following commands) +```bash +usbipd list +``` - BUSID VID:PID DEVICE STATE - 1-1 303a:1001 USB Serial Device (COM4), USB JTAG/serial debug unit Not shared +In this example, the devkit used is the **ESP32-C6-DevKit-C**, with the **1-1 is the BUSID**, which will be needed in the following commands. +```text +BUSID VID:PID DEVICE STATE +1-1 303a:1001 USB Serial Device (COM4), USB JTAG/serial debug unit Not shared +``` -Bind the listed devkit with following command in host terminal (needs administrative privileges) +Now, bind the listed devkit with following command in host terminal (needs administrative privileges). - usbipd bind --busid 1-1 +```bash +usbipd bind --busid 1-1 +``` -Attach the device in the host terminal (needs already running instance of WSL) +Attach the device in the host terminal (needs already running instance of WSL). - usbipd attach --wsl --busid 1-1 +```bash +usbipd attach --wsl --busid 1-1 +``` -Now you should be able to see the devkit in the WSL terminal (run *lsusb* to check) and that should be everything needed. You can start using the attached serial port directly in the WSL. +Now you should be able to see the devkit in the WSL terminal. You can run `lsusb` command to check it. You can now start using the attached serial port directly in the WSL. ### Troubleshooting note -If the devkit is not possible to use even after attaching (and is visible with the *lsusb* command) you can run the following command in the WSL terminal +If is not possible to use the devkit, even after attaching, but it is visible with the `lsusb` command, you can run the following command in the WSL terminal: - sudo modprobe cp210x +```bash +sudo modprobe cp210x +``` -this will add kernel module with the needed controller but only for the instance. To add this permanently, it can be done with the following command +This will add kernel module with the needed controller only for the current instance. - echo "cp210x" | sudo tee -a /etc/modules +To add this permanently, it can be done with the following command: -### Detach a devkit +```bash +echo "cp210x" | sudo tee -a /etc/modules +``` -When working with the devkit is completed, you can detach the devkit with the command in the host terminal +### Detach the USB - usbipd detach --busid 1-1 +When you don't need to keep the devkit connected, you can detach the USB with this command: + +```bash +usbipd detach --busid 1-1 +``` ## Conclusion -Working with WSL and Espressif's devkits for certain use cases may not be that simple. While for basic operations, using the esp_rfc2217_server might be enough (where the host machine acts as the server and the WSL terminal as the client) this method may not be always sufficient. In some cases, direct interaction with the devkit from within WSL becomes necessary. When that happens, serial port forwarding can be employed. With the help of this guide, we hope the process is now clearer, making it easier for you to work with Espressif's devkits in a WSL. +Working with WSL and Espressif's SoCs, for certain use cases may not be that simple. While for basic operations, using the `ESP_RFC2217_server` might be enough (where the host machine acts as the server and the WSL terminal as the client) this method may not be always sufficient. In some cases, direct interaction with the devkits from within WSL becomes necessary. When that happens, serial port forwarding can be employed. + +With the help of this guide, we hope the process is now clearer, making it easier for you to work with Espressif's devkits in a WSL. ## Resources diff --git a/data/authors/jakub-kocka.json b/data/authors/jakub-kocka.json new file mode 100644 index 000000000..be225a7cc --- /dev/null +++ b/data/authors/jakub-kocka.json @@ -0,0 +1,6 @@ +{ + "name": "Jakub Kocka", + "image" : "img/authors/espressif.png", + "social": [ + ] +}