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

news/2025/9/22 12:18:40/文章来源:https://www.cnblogs.com/cc-cnblogs/p/19104671

之前使用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.mzph.cn/news/909312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗

目录先明确核心区别:OkHttp3与Reactor模型的定位为什么可能还需要Reactor模型?何时需要引入Reactor?何时可以不引入Reactor?总结 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模…

数据结构-单链表基础2

0.基本结构和函数 前置内容,可以访问数据结构-单链表基础1点击查看代码 typedef int ElemType; typedef struct LNode {ElemType data;struct LNode *next; } LNode, *linkList; void CreateList_R(linkList *L, int …

LLM的MCP协议通讯方式详解:Stdio、SSE与流式HTTP的选择与实践 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Trellix自动化大规模修复开源漏洞,已修补超6万个项目

Trellix通过自动化工具加速修复Python的tarfile模块中存在15年的路径遍历漏洞(CVE-2007-4559),已成功修补61,895个开源项目,并与GitHub合作实现大规模批量拉取请求的自动化修复流程。Trellix自动化大规模修复开源漏…

AI 编程工具选型速览(2025-09 版) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?

阿里云 Kafka 不仅为尚娱提供了高可靠、低延迟的消息通道,更通过 Serverless 弹性架构实现了资源利用率和成本效益的双重优化,助力尚娱在快速迭代的游戏市场中实现敏捷运营、稳定交付与可持续增长。作者:横槊、永安…

Vben Admin5.0 keepAlive缓存和onActivated未生效

根据文档 https://doc.vben.pro/guide/essentials/route.html#keepalive 需要打开页面缓存,缓存才会生效 在配置文件preferences.ts下开启export const overridesPreferences = defineOverridesPreferences({// overr…

yakit + proxifier 解决`all tls strategy failed报错

yakit + proxifier 解决`all tls strategy failed报错场景 在 proxifier + yakit 时,某一个 https 的 url总会遇到`all tls strategy failed 失败的情况,其余的 url,甚至换成 burp 都 ok,百思不得其解。 解决思路 …

版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)

本文分享自华为云社区《版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)》,作者:Versatile运营小助手。< 华为云Versatile智能体平台 体验入口 >(请在PC端打开) 版本概览 Versatile 92…

详细介绍:传输层TCP 与 安全层SSL/TLS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PE程序常见脱壳方案

PE程序常见脱壳方案 基础知识 PE文件格式 PE(Portable Executable)是Windows平台下的可执行文件格式。理解PE结构是成功脱壳的前提,加壳程序的核心策略就是通过篡改、加密或隐藏原始PE头信息来保护代码,这意味着脱…

spring ai基于内存RAG尝鲜

RAG,数据检索增强生成,简单点说你提供一个数据集,让语言模型根据你的数据集回答问题。 1.新增依赖 这次的练习demo是将一个pdf作为数据集,喂给模型做训练生成内存向量库,以此回答问题。下面新增的依赖是pdf阅读和…

基于 IOCP 的协程调度器——零基础深入浅出 C++20 协程

将真实的异步 IO 事件与协程相结合、例子规模控制在 200 行、能编译能运行的 Windows C++20 协程 demo,见过没?今天就给各位老铁整一个,它还支持多协程并发哦~前言 上一篇《基于 epoll 的协程调度器》谈到如何基于 …

Gitee PPM风险矩阵:数字化转型中的项目管理预警雷达

Gitee PPM风险矩阵:数字化转型中的项目管理"预警雷达" 在数字化转型浪潮席卷全球的当下,软件研发项目正面临着前所未有的复杂度和不确定性。根据Gartner最新发布的行业报告显示,2023年全球IT项目的平均延…

同一个灰色,POI取出来却是白色:一次Excel颜色解析的踩坑记录

解析Excel单元格颜色时遇到主题色与普通色差异问题。当单元格使用主题色时,直接获取RGB值会失效,需结合ThemesTable获取基础颜色并考虑tint参数(用于调整明暗度)。通过封装工具类,先判断是否为主题色,再解析基础…

坤驰科技携国产化MTCA解决方案,亮相大科学装置控制系统研讨会

“2025MicroTCA/ATCA在大科学装置控制系统中的应用研讨会”在重庆君豪大饭店召开,北京坤驰科技携国产化MTCA硬件平台及数据采集解决方案参会。国产化 MTCA平台 坤驰科技深耕大科学装置(高能物理、激光、光子光束线等…

找出所有项目引用了哪些 NuGet 包、版本号、对应项目路径,并筛选出“同一个包名但版本不同”的情况。

全局扫描所有 .csproj 文件 打开 PowerShell,运行以下脚本(替换为你的代码根目录): $root = "D:\YourCodeRoot" $results = Get-ChildItem -Path $root -Recurse -Filter *.csproj | ForEach-Object {$p…

人形机器人 —— 电机控制的三种模式 —— 力矩、速度、位置

人形机器人 —— 电机控制的三种模式 —— 力矩、速度、位置电机控制的三种模式: 力矩、速度、位置其实,这三种模式说的并不是很清晰,准确来说应该是缺少了一个变量,那就是时间变量,准确的来说就是在单位时间内的…

解决Windows更新后WPF代码报TypeLoadException异常的困难

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PC与基恩士PLC通信的C#实现

1 确定通信方式与协议 PC与基恩士PLC通信通常主要通过以太网进行,有时也会使用串口。关键在于PLC型号和支持的协议,常见的有:MC协议 (MELSEC Communication Protocol):这是三菱PLC的协议,但概念类似,基恩士有其自…