2. 开发环境搭建:安装Zephyr SDK、配置west工具、创建并构建第一个示例工程
在开始I2C与SPI总线驱动开发之前,必须搭建一套完整、可复现的Zephyr开发环境。本章将引导你完成从零到构建第一个示例工程的完整流程,涵盖Zephyr SDK安装、west工具配置、源码获取与编译验证。所有操作均以Linux(Ubuntu 22.04 LTS)为基准,Windows/macOS用户可参考官方文档做相应调整。
python3 --version && cmake --version && git --version 快速验证。
2.1 开发环境整体架构
下图展示了Zephyr开发环境的层次关系:west工具作为顶层工作流管理器,协调SDK、源码树与构建系统;Zephyr SDK提供跨平台编译器与调试器;应用工程通过CMake与Kconfig完成配置和编译。
2.2 安装Zephyr SDK
Zephyr SDK是预编译的跨平台工具链集合,包含编译器、链接器、调试器(GDB)以及QEMU模拟器。推荐使用官方提供的SDK安装脚本,避免手动配置工具链路径的繁琐过程。
2.2.1 下载与安装步骤
- 下载SDK安装包:访问 Zephyr SDK Releases,选择最新稳定版(如0.16.8),下载适用于Linux的
zephyr-sdk-0.16.8_linux-x86_64.tar.xz。 - 解压到目标目录:建议统一放在
/opt下,避免权限问题。 - 运行安装脚本:脚本会自动设置环境变量并安装udev规则。
# 解压SDK
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.8/zephyr-sdk-0.16.8_linux-x86_64.tar.xz
sudo tar xf zephyr-sdk-0.16.8_linux-x86_64.tar.xz -C /opt
# 运行安装脚本
cd /opt/zephyr-sdk-0.16.8
sudo ./setup.sh
# 验证安装
ls /opt/zephyr-sdk-0.16.8/arm-zephyr-eabi/bin/
# 应看到 arm-zephyr-eabi-gcc, arm-zephyr-eabi-gdb 等文件
setup.sh 报错“Permission denied”,请确认已使用 sudo 执行。若系统缺少 libncurses5 或 libpython3.10,请先安装对应依赖包。
2.2.2 SDK目录结构
| 目录/文件 | 说明 |
|---|---|
arm-zephyr-eabi/ |
ARM Cortex-M/R/A 工具链(最常用) |
riscv64-zephyr-elf/ |
RISC-V 64位工具链 |
xtensa-espressif_esp32/ |
Espressif ESP32 工具链 |
sysroots/ |
目标系统根文件系统(用于QEMU) |
setup.sh |
安装脚本,配置环境变量与udev规则 |
2.3 配置west工具
west是Zephyr的元构建工具,封装了CMake、Ninja和自定义命令。它通过manifest文件管理多个仓库(zephyr、modules、applications),实现一键初始化、更新和构建。
2.3.1 安装west
# 使用pip安装west
pip3 install --user west
# 确认安装成功
west --version
# 输出示例:West version: v1.2.0
2.3.2 初始化工作区
创建一个空目录作为Zephyr工作区,然后使用 west init 拉取主仓库和manifest文件。
# 创建工作区目录
mkdir ~/zephyr-workspace
cd ~/zephyr-workspace
# 初始化(使用官方manifest)
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.6.0
# 拉取所有模块(zephyr、hal、modules等)
west update
west init 只下载 .west/config 和 west.yml 清单文件;west update 才真正克隆所有仓库。首次更新会下载约2-3GB数据,请确保网络稳定。
2.3.3 导出Zephyr CMake包
为了让CMake能够找到Zephyr构建系统,需要导出CMake包路径:
# 从zephyr仓库根目录导出
cd ~/zephyr-workspace/zephyr
west zephyr-export
# 验证CMake能找到Zephyr
cmake -P zephyr/cmake/verify-toolchain.cmake
2.4 创建并构建第一个示例工程
使用Zephyr内置的 samples/basic/blinky 作为第一个工程,它控制开发板上的LED闪烁,是验证工具链和构建流程是否正确的标准测试。
2.4.1 创建工程目录
# 在工作区外创建应用目录(推荐做法)
mkdir ~/zephyr-apps
cd ~/zephyr-apps
# 复制blinky示例
cp -r ~/zephyr-workspace/zephyr/samples/basic/blinky ./my-blinky
cd my-blinky
2.4.2 工程文件结构
| 文件 | 作用 |
|---|---|
CMakeLists.txt |
定义应用名称、源文件、依赖的Zephyr模块 |
prj.conf |
Kconfig配置,启用GPIO、I2C、SPI等驱动 |
src/main.c |
应用主逻辑,调用Zephyr API控制硬件 |
boards/ |
(可选)板级覆盖配置,如引脚映射 |
2.4.3 构建工程
使用 west build 命令指定目标板(如 nrf52840dk_nrf52840)和构建目录。
# 设置Zephyr基础环境变量(每次新终端都需要)
export ZEPHYR_BASE=~/zephyr-workspace/zephyr
source $ZEPHYR_BASE/zephyr-env.sh
# 构建blinky,目标板为nRF52840 DK
west build -b nrf52840dk_nrf52840 -d build
# 构建输出示例
# -- west build: generating a build system
# -- west build: building
# [1/100] Building C object zephyr/CMakeFiles/zephyr.dir...
# [100/100] Linking C executable zephyr/zephyr.elf
nrf52840dk_nrf52840(Nordic)、stm32f429_disco(ST)、esp32_devkitc_wroom(Espressif)、qemu_cortex_m3(QEMU模拟)。使用 west boards 可列出所有支持的板卡。
2.4.4 构建产物验证
构建成功后,检查生成的文件:
ls -lh build/zephyr/
# 关键文件:
# zephyr.elf - 带符号的ELF文件(用于调试)
# zephyr.hex - Intel HEX格式(用于烧录)
# zephyr.bin - 纯二进制镜像
# zephyr.map - 内存映射文件(分析RAM/ROM占用)
2.5 使用QEMU验证(无硬件也可运行)
如果没有物理开发板,可以使用QEMU模拟Cortex-M3平台运行blinky示例,验证环境配置正确性。
# 使用QEMU目标板构建
west build -b qemu_cortex_m3 -d build-qemu
# 运行(自动启动QEMU窗口)
west build -t run -d build-qemu
# 终端输出示例:
# *** Booting Zephyr OS build v3.6.0 ***
# LED state: ON
# LED state: OFF
# ...(每500ms切换一次)
qemu-system-arm(Ubuntu: sudo apt install qemu-system-arm)。如果QEMU窗口无显示,尝试添加 -nographic 参数:west build -t run -d build-qemu -- -nographic。
2.6 环境验证清单
完成上述步骤后,使用下表逐项确认环境就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| west工具 | west --version |
≥ v1.2.0 |
| Zephyr SDK | ls /opt/zephyr-sdk-0.16.8/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc |
文件存在 |
| CMake | cmake --version |
≥ 3.20 |
| Python | python3 --version |
≥ 3.8 |
| 构建blinky | west build -b nrf52840dk_nrf52840 -d build |
构建成功,生成zephyr.elf |
| QEMU运行 | west build -b qemu_cortex_m3 -d build-qemu && west build -t run -d build-qemu |
LED状态交替打印 |
2.7 常见问题与解决
- west update 失败(网络超时):使用代理或更换镜像源。在
~/.west/config中设置[remote "origin"] url = https://gitee.com/zephyrproject-rtos/zephyr(国内用户)。 - CMake找不到Zephyr:确认已执行
west zephyr-export并source zephyr-env.sh。 - 编译报错“arm-zephyr-eabi-gcc: not found”:检查
ZEPHYR_SDK_INSTALL_DIR环境变量是否指向SDK根目录。 - QEMU窗口黑屏:尝试使用
west build -t run -d build-qemu -- -nographic在终端显示串口输出。
~/.bashrc 或 ~/.zshrc,避免每次打开终端重复执行:
echo 'export ZEPHYR_BASE=~/zephyr-workspace/zephyr' >> ~/.bashrc
echo 'source $ZEPHYR_BASE/zephyr-env.sh' >> ~/.bashrc
source ~/.bashrc