当前位置: 首页 > news >正文

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 ]; thenecho "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; thensudo tee $WSL_CONF > /dev/null <<EOF
[boot]
systemd=true[user]
default=root
EOFecho "/etc/wsl.conf updated"elseecho "/etc/wsl.conf already contains the settings, skipping"fi
elseecho "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"; thensudo sed -i '/^#.*en_US.UTF-8/s/^#//' /etc/locale.gensudo locale-gen en_US.UTF-8sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
fi# ================================
# Python 虚拟环境 + 安装 west
# ================================
if [ ! -d "$VIRTUAL_ENV" ]; thensudo python3 -m venv ${VIRTUAL_ENV}
fi
if ! grep -q "PATH=.*${VIRTUAL_ENV}" ~/.bashrc; thenecho "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" ]; thenecho "Cloning Zephyr source..."sudo git clone https://github.com/zephyrproject-rtos/zephyr.git
elseecho "Zephyr already exists, updating..."
ficd zephyr
sudo git fetch --all
sudo git checkout main
pip install -r scripts/requirements-base.txt# ================================
# 初始化 west workspace
# ================================
cd /opt/toolchains
if [ ! -d ".west" ]; thenecho "Running west init..."west init -l zephyr
elseecho "west workspace already exists, skipping west init"
fiwest 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.shexport ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-0.17.4
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
source ~/.bashrc# ================================
# 自动加载环境变量
# ================================
if [ -d "/opt/venv" ]; thengrep -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" >> ~/.bashrcecho "? 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 offchcp 65001 >nulREM === 默认配置 ===
set CHIP=esp32s3
set PORT=COM18
set BAUD=921600
set BIN=\\wsl$\ubuntu-24.04\home\c\lichuang_shizhanpai_zephyr\build\zephyr\zephyr.binREM === 如果传参,优先使用参数 ===
if not "%1"=="" set CHIP=%1
if not "%2"=="" set PORT=%2
if not "%3"=="" set BAUD=%3
if not "%4"=="" set BIN=%4echo ==========================================
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

 

http://www.hskmm.com/?act=detail&tid=13220

相关文章:

  • 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗
  • 数据结构-单链表基础2
  • G1垃圾回收过程
  • Trellix自动化大规模修复开源漏洞,已修补超6万个项目
  • 爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
  • Vben Admin5.0 keepAlive缓存和onActivated未生效
  • 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)
  • JVM体系结构
  • PE程序常见脱壳方案
  • 基于二值化断裂裂缝的裂缝拼接算法
  • spring ai基于内存RAG尝鲜
  • 想自己做大模型备案的企业看过来【评估测试题+备案源文件】
  • 基于 IOCP 的协程调度器——零基础深入浅出 C++20 协程
  • Gitee PPM风险矩阵:数字化转型中的项目管理预警雷达
  • 同一个灰色,POI取出来却是白色:一次Excel颜色解析的踩坑记录
  • 坤驰科技携国产化MTCA解决方案,亮相大科学装置控制系统研讨会
  • 找出所有项目引用了哪些 NuGet 包、版本号、对应项目路径,并筛选出“同一个包名但版本不同”的情况。
  • PC与基恩士PLC通信的C#实现
  • Excel 表格技能
  • labelme标注后的json文件和原图同步按角度旋转
  • rk3588的ai功能和deepseek
  • EPSON L1300打印机清零教程
  • 「线性代数」矩阵运算与初等变换
  • 移动号码线上复机
  • Uni-App 使用android studio打包最新教程
  • tomcat CPU数量和线程数的关系
  • NASA运货飞船天鹅座再次推迟,航天任务为什么总是“彩排”不断
  • Centos系统切换为光盘本地源
  • 基于Hilbert-Huang变换(HHT)的模态分解与瞬时频率计算
  • NIO