文章目录[隐藏]
环境搭建推荐两种方式,一是在虚拟机中运行、二是在windows下运行。在Ubuntu下搭建环境也比较方便,博主之前一直使用的Ubuntu环境开发和学习zephyr,现在尝试使用Windows下开发。虚拟机下的环境搭建参考官方文档
注意:本文中如果显示路径一会儿D盘一会F盘,那是因为博主是在两台电脑上操作的,这个不影响。
预备
首先电脑本地需要软件包管理器 winget
,在现代 Windows 版本中,winget 已默认预装。管理员身份打开电脑 powershell
,输入以下命令验证:
先升级 powershell 7, 新版自带的命令补全。(下文中我的显示powershell 5.1是我没升级前的版本,不影响) 参考文章
安装依赖项
以管理员身份打开 powershell、输入以下指令安装 zephyr
所需的依赖项:
winget install Kitware.CMake Ninja-build.Ninja oss-winget.gperf python Git.Git oss-winget.dtc wget 7zip.7zip SoftwareFreedomConservancy.QEMU
Kitware.CMake
:CMake 构建系统工具,用于管理软件项目的构建过程。Ninja-build.Ninja
:Ninja 构建工具,一个快速的构建系统。oss-winget.gperf
:gperf 工具,用于生成完美哈希函数的代码生成器。python
:Python 编程语言及其解释器。Git.Git
:Git 版本控制系统,用于代码管理和协作。oss-winget.dtc
:Device Tree Compiler (dtc),用于编译设备树文件(常用于嵌入式系统)。wget
:wget 命令行工具,用于从网络下载文件。7zip.7zip
:7-Zip 压缩和解压工具。QEMU
: 仿真平台
将需常用到的加入系统环境变量:
输入以下指令先获取安装路径:
Get-ChildItem -Path 'C:\Program Files','C:\Program Files (x86)',"env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Recurse -File -ErrorAction SilentlyContinue | Where-Object {_.Name -in @('7z.exe','qemu-system-arm.exe','ninja.exe','dtc.exe') } | Select-Object -ExpandProperty DirectoryName -Unique
加入系统环境变量:
重启powershell,输入以下指令检查是否生效:
dtc --version
Ninja --version
qemu-system-arm --version
7z.exe -version
创建 python 虚拟环境
为什么使用虚拟环境?
– 隔离性:避免与系统Python包冲突
– 可重现性:确保开发环境一致性
– 版本管理:独立管理Zephyr相关的Python依赖
# 1. 进入自己的工作路径,创建虚拟环境
python -m venv zephyrproject\.venv
# 2. 激活虚拟环境。如果要退出虚拟环境:deactivate
zephyrproject\.venv\Scripts\Activate.ps1
环境搭建
安装 West 工具
什么是 West ?
west 是一个专门为 Zephyr 项目设计的工具,它简化了项目的初始化、依赖管理、构建、闪存和环境管理等任务。通过使用 west,开发者可以更高效地进行Zephyr项目的开发和调试。为什么之前安装了 ninja,现在需要west?
west 是管理整个项目生命周期,Ninja 只负责构建步骤。两者都需要。
在虚拟环境中使用 pip 安装 west:
pip install west
完成安装后,执行以下命令验证 west 是否安装成功:
west --version
获取zephyr源码:
west init zephyrproject // 初始化zephyr环境并获取源码
cd zephyrproject // 进入zephyrproject目录
west update // 更新zephyr源码
如果要clone自己的zephyr仓库,把第一句指令改为(xxx为自己仓库):
west init -m xxx > > zephyrproject
不出意外的话,更新成功就是这样子:
导出 Zephyr Cmake package:
west zephyr-export
- 在你的工作区中为 Zephyr 生成 CMake package 配置文件(使得 find_package(Zephyr) 可用)。
- 生成的文件包含 Zephyr 的路径、需要的 CMake 模块以及构建辅助信息,方便外部 CMake 项目引用 Zephyr。
- 通常在你已经克隆/更新了 Zephyr 源码后运行;如果只是用 west build 构建示例通常不需要,但如果要把 Zephyr 当作外部库用在其它 CMake 项目,就需要运行它。
安装 python依赖:
pip install -r zephyr\scripts\requirements.txt
-r 是指定依赖文件;
安装完成截图:
安装 Zephyr SDK
Zephyr 软件开发工具包(SDK) 包含 Zephyr 支持的每个架构的工具链,其中包括编译器、汇编器、链接器和构建 Zephyr 应用程序所需的其他程序。
cd .\zephyrproject\zephyr\
west sdk install
如果下载失败,切换网络还是不行,就采用以下方案:
官网SDK下载链接。
我使用的是0.17.4版本
下载完成后解压到文件夹,解压路径可以自己选择。
打开 setup.cmd
根据提示按两次Y即可,只需要运行一次就好,如果不更改SDK源码的情况下:
然后把 sdk 的
xtensa-espressif_esp32s3_zephyr-elf\bin\
路径按照前面说的办法,加入到系统环境变量中,以后需要使用 esp32 的这些工具只需要输入 xtensa-espressif 在按 tab 就可以自动补全,而无需完整指定路径。当然如果需要其他架构的工具链只需指定对应路径即可。
以下是我的安装路径参考。D:\workspace\tools\zephyr-sdk-0.17.4_windows-x86_64\ze>phyr-sdk-0.17.4\xtensa-espressif_esp32s3_zephyr-elf\bin\
编译构建程序(虚拟开发板)
Sample 路径下有很多的示例,我们构建 hello word 示例。
以 qemu_cortex_m3 为例,构建并运行 hello word 程序:
west build -b qemu_cortex_m3 samples/hello_world -p
west build -t run
编译构建程序(esp32s3开发板)
安装esptool工具:
esptool 是 Espressif 官方的烧录/调试工具,负责通过串口与 ESP32 系列芯片交互:识别芯片、擦写分区、写入固件、校验、复位等。
Zephyr 的 esp32 runner 在执行 west flash 时会调用 esptool 来把 mcuboot 和应用镜像写入 flash
pip install esptool
安装OpenOCD
OpenOCD 的作用:通过 JTAG / SWD 等调试接口把硬件调试探针(J-Link、FTDI、CMSIS-DAP 等)和目标板连接起来,提供一个 GDB Server 和命令接口,用于下载、调试、读写寄存器/内存、单步/断点、复位与电源控制、以及有时通过探针擦写/烧录 flash。
下载链接:https://github.com/espressif/openocd-esp32/releases
下载完成后解压,找到bin文件夹,复制路径,按照之前的办法加入系统环境变量。
检查版本:
openocd --version
拉取 esp32 需要的库:
west blobs fetch hal_espressif
west update
git rebase origin/main
- 第一行:下载 Zephyr 项目中 ESP32 平台依赖的二进制固件(如 WiFi/BT blobs),这些通常不包含在源码里,但编译 ESP32 相关应用时必须有。
- 第二三行:保持本地分支和主线同步。
开发板测试
这里使用esp32s3开发板为例:
把 USB 2.0 数据线(标准 A 型转 Micro-B 型)连接开发板和电脑,打开设备管理器,检查自己的端口:我的端口为COM6
如果没有识别到串口,网上搜索下载安装ch343驱动。
编译一个用例:
west build -b esp32s3_devkitc/esp32s3/procpu --sysbuild samples/hello_world -p
这里指的的板卡型号为
esp32s3_devkitc/esp32s3/procpu
的原因是 esp32s3 是双核 cpu,分为 PRO_CPU(通常称 procpu / core0)和 APP_CPU(appcpu / core1),上电时 PRO_CPU 先启动,再由它启动或加载 APP_CPU。在 Zephyr 中,有些板子为双核 SoC 提供“board qualifiers”,形如: board/芯片/目标 —— 比如 esp32s3_devkitc/esp32s3/procpu 和 esp32s3_devkitc/esp32s3/appcpu。 这是因为需要分别为两个核构建不同的固件镜像(启动核与从核职责可能不同)。
--sysbuild
:选择使用 MCUboot 引导加载程序。
编译结果:
下载
west -v flash
-v 参数:显示 west 命令的细节
下载成功:
打开串口检测:
west espressif monitor --port COM6
成功输出 hello word!
至此,我们的开发环境搭建完成了。因为博主准备后续使用esp32s3,所以用此开发板为例搭建环境。
调试
方式1:
xtensa-esp32s3-elf-gdb build/zephyr/zephyr.elf
(gdb) target remote :3333
方式2:
west debug
参考链接:
[1] Zephy移植到STM32
[2] Zephyr 编译环境搭建(Linux + Window)
[3] 官方文档
[4] ESP32-S3-DevKitC-1 v1.1
[5] 快速提高生产力——Power Shell也能命令提示并自动补全
[6] 官网SDK下载链接
[7] Openocd下载连接
了解 Heiweilu的小世界 的更多信息
订阅后即可通过电子邮件收到最新文章。