Loading

WSL+共享文件夹搭建zephyr工作环境

之前使用window是编译,但是发现编译真的太慢了,所以还是尝试安装ubuntu来开发:

我这里有一个搭建好的,可以直接wsl安装,但是不支持完整的SDK工具,只支持esp32和arm

sdk版本是 0.17.4,只安装了(arm,esp32, esp32s2,esp32s3)的SDK,zephyr源码版本是4.2.99

链接:https://pan.quark.cn/s/d44234778cae
提取码:ZsCh

 

1.安装wsl 

wsl --install -d Ubuntu-24.04

 这里一般会安装在c盘,可以导出安装在其他盘,我这里装到D:\WSL

// 导出
wsl --export Ubuntu-24.04 D:\WSL\Ubuntu-24.04.tar
// 删除旧的
wsl --unregister Ubuntu-24.04
// 导入新的
wsl --import Ubuntu-24.04 D:\WSL\Ubuntu-24.04 D:\WSL\Ubuntu-24.04.tar --version 2

 2.vscode 安装远程管理的插件:Remote Explorer

image

image

然后打开Ubuntu,粘贴 step_zephyr_wsl.sh 这个脚本文件到/home/(用户)

    注意这个脚本是针对我的系统搭建配置的,

    我在下载SDK的时候特别慢,所以选择的是先下好SDK压缩包,然后程序执行的,

    我的压缩包都是放在 /home/c里面的,解压后安装到/opt/toolchains/zephyr-sdk-0.17.4

    可以下载完整SDK,安装会简单一些。

查看代码 step_zephyr_wsl.sh
#!/bin/bash
set -e

# =============================
# 配置参数
# =============================
USER_HOME=/home/c
VIRTUAL_ENV=/opt/venv

# ================================
# 创建必要目录
# ================================
sudo mkdir -p /opt/toolchains
sudo mkdir -p /opt/toolchains/zephyr-sdk-0.17.4

# ================================
# 如果当前用户不是 root,则更新 /etc/wsl.conf
# ================================
if [ "$EUID" -ne 0 ]; then
    echo "Current user is not root, using sudo to update /etc/wsl.conf..."

    WSL_CONF="/etc/wsl.conf"
    if ! grep -q "\[user\]" $WSL_CONF 2>/dev/null || ! grep -q "default=root" $WSL_CONF 2>/dev/null; then
        sudo tee $WSL_CONF > /dev/null <<EOF
[boot]
systemd=true

[user]
default=root
EOF
        echo "/etc/wsl.conf updated"
    else
        echo "/etc/wsl.conf already contains the settings, skipping"
    fi
else
    echo "Current user is root, skipping /etc/wsl.conf update"
fi

# ================================
# 安装基础依赖
# ================================
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
    dos2unix ca-certificates file locales git build-essential cmake ninja-build gperf \
    device-tree-compiler wget curl python3 python3-pip python3-venv xz-utils \
    vim nano mc

# ================================
# 本地化设置
# ================================
if ! locale -a | grep -q "en_US.utf8"; then
    sudo sed -i '/^#.*en_US.UTF-8/s/^#//' /etc/locale.gen
    sudo locale-gen en_US.UTF-8
    sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
fi

# ================================
# Python 虚拟环境 + 安装 west
# ================================
if [ ! -d "$VIRTUAL_ENV" ]; then
    sudo python3 -m venv ${VIRTUAL_ENV}
fi
if ! grep -q "PATH=.*${VIRTUAL_ENV}" ~/.bashrc; then
    echo "export PATH=\"${VIRTUAL_ENV}/bin:\$PATH\"" >> ~/.bashrc
fi
source ${VIRTUAL_ENV}/bin/activate
pip install --no-cache-dir wheel west

# ================================
# 下载和配置 Zephyr 源码
# ================================
cd /opt/toolchains
if [ ! -d "zephyr/.git" ]; then
    echo "Cloning Zephyr source..."
    sudo git clone https://github.com/zephyrproject-rtos/zephyr.git
else
    echo "Zephyr already exists, updating..."
fi

cd zephyr
sudo git fetch --all
sudo git checkout main
pip install -r scripts/requirements-base.txt

# ================================
# 初始化 west workspace
# ================================
cd /opt/toolchains
if [ ! -d ".west" ]; then
    echo "Running west init..."
    west init -l zephyr
else
    echo "west workspace already exists, skipping west init"
fi

west update --narrow -o=--depth=1
west packages pip --install

# ================================
# 安装 Zephyr SDK 手动
# ================================
# 安装最小包和指定包,和下面完整可以选一个
# cd /home/c
# tar xf zephyr-sdk-0.17.4_linux-x86_64_minimal.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4 --strip-components=1
# # ARM 工具链
# tar xf toolchain_linux-x86_64_arm-zephyr-eabi.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4
# # ESP32 工具链
# tar xf toolchain_linux-x86_64_xtensa-espressif_esp32_zephyr-elf.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4
# tar xf toolchain_linux-x86_64_xtensa-espressif_esp32s2_zephyr-elf.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4
# tar xf toolchain_linux-x86_64_xtensa-espressif_esp32s3_zephyr-elf.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4

# cd /opt/toolchains/zephyr-sdk-0.17.4
# sudo ./setup.sh -t arm-zephyr-eabi
# sudo ./setup.sh -t xtensa-espressif_esp32_zephyr-elf
# sudo ./setup.sh -t xtensa-espressif_esp32s2_zephyr-elf
# sudo ./setup.sh -t xtensa-espressif_esp32s3_zephyr-elf
# sudo ./setup.sh -c

#安装完整包 ,这个和上面自定义可以选一个
cd /home/c
tar xf zephyr-sdk-0.17.4_linux-x86_64.tar.xz -C /opt/toolchains/zephyr-sdk-0.17.4 --strip-components=1
cd /opt/toolchains/zephyr-sdk-0.17.4
sudo ./setup.sh

export ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-0.17.4
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
source ~/.bashrc

# ================================
# 自动加载环境变量
# ================================
if [ -d "/opt/venv" ]; then
    grep -qxF "source /opt/venv/bin/activate" ~/.bashrc || \
        echo "source /opt/venv/bin/activate" >> ~/.bashrc
fi
grep -qxF "source /opt/toolchains/zephyr/zephyr-env.sh" ~/.bashrc || \
    echo "source /opt/toolchains/zephyr/zephyr-env.sh" >> ~/.bashrc


echo "? Zephyr WSL environment installation complete!"
echo "   Please run: source ~/.bashrc"

执行脚本:

chmod +x step_zephyr_wsl.sh
./step_zephyr_wsl.sh

等待脚本执行万完成,需要等待很久,需要使用魔法....不然很容易断联

 

完成后就可以以尝试编译一下了:

cd /opt/toolchains/zephyr
west build -p always -b gd32e103v_eval samples/hello_world 
west build -p always -b esp32s3_devkitc/esp32s3/procpu samples/hello_world

 

3.创建共享文件夹

可以参照这个:WSL Windows和Ubuntu 共享文件夹设置(ubuntu的Windows子系统)_wsl 共享文件夹-CSDN博客

先查看ubuntu的名字

wsl --list --verbose


显示如下
  NAME            STATE           VERSION
* Ubuntu-24.04    Stopped         2

然后 此电脑(右键)---->添加一个网络位置---->\\wsl$\Ubuntu-24.04\home\c

image

创建成功,就可以把应用程序放在这里面编译了,编译完成后,bin文件主机和wsl就共用这个文件夹了

编译完成后bin文件可以通过 esptool 烧录。

这里还有一个简单的烧录脚本,方便一键烧录:


需要手动配置参数:
set CHIP=esp32s3
set PORT=COM18
set BAUD=921600
set BIN=\\wsl$\ubuntu-24.04\home\c\lichuang_shizhanpai_zephyr\build\zephyr\zephyr.bin

查看代码 zephyr_flash.bat
@echo off

chcp 65001 >nul

REM === 默认配置 ===
set CHIP=esp32s3
set PORT=COM18
set BAUD=921600
set BIN=\\wsl$\ubuntu-24.04\home\c\lichuang_shizhanpai_zephyr\build\zephyr\zephyr.bin

REM === 如果传参,优先使用参数 ===
if not "%1"=="" set CHIP=%1
if not "%2"=="" set PORT=%2
if not "%3"=="" set BAUD=%3
if not "%4"=="" set BIN=%4

echo ==========================================
echo  ESP32 烧录脚本
echo  芯片类型: %CHIP%
echo  串口端口: %PORT%
echo  波特率  : %BAUD%
echo  固件文件: %BIN%
echo ==========================================

py -3.12 -m esptool --chip %CHIP% --port %PORT% --baud %BAUD% ^
    write_flash -z 0x0 %BIN%

if errorlevel 1 (
    echo *** 烧录失败,请检查参数和连接!***
) else (
    echo 烧录成功!
)

pause

 

posted @ 2025-09-22 12:14  cc_record  阅读(81)  评论(0)    收藏  举报