2. 开发环境搭建:Zephyr SDK安装、west工具配置、创建第一个Hello World工程

在开始Zephyr OS传感器驱动开发之前,必须搭建一套完整、可复现的开发环境。本章将引导你完成从工具链安装到第一个嵌入式应用运行的完整流程,确保后续I2C传感器驱动调试有一个稳定的基础。

2.1 开发环境全景概览

Zephyr开发环境由四个核心层次组成:主机工具链、Zephyr SDK、west构建系统以及目标板支持包。下图展示了各组件之间的依赖关系与数据流。

Zephyr开发环境架构图 Zephyr开发环境四层架构 主机操作系统 (Linux / macOS / Windows) Zephyr SDK (工具链 + 调试器 + QEMU) arm-zephyr-eabi-gcc / openocd / qemu-system-arm west 构建系统 + Zephyr RTOS 源码树 west init / west update / west build / west flash 目标硬件 (STM32 / nRF52 / ESP32 / QEMU) I2C传感器 / GPIO / UART控制台 关键路径 CMake Devicetree Kconfig 链接脚本 固件烧录 串口调试

2.2 安装Zephyr SDK

Zephyr SDK为嵌入式交叉编译提供完整的工具链、调试器和QEMU模拟器。推荐使用v0.16.8或更新版本,以支持最新的ARM Cortex-M和RISC-V内核。

组件 用途 版本要求
arm-zephyr-eabi-gcc ARM Cortex-M/R/A 交叉编译器 ≥ 12.2.0
openocd 片上调试器,支持JTAG/SWD ≥ 0.12.0
qemu-system-arm ARM Cortex-M3/M4 模拟器 ≥ 8.0.0
hosttools dtc、west依赖、python3 随SDK发布
💡 安装建议: 如果主机是Ubuntu 22.04或更新版本,可以直接使用官方提供的setup脚本一键安装。对于macOS用户,建议通过Homebrew安装依赖后手动解压SDK。

2.2.1 Linux/macOS安装步骤

  1. 下载SDK安装包:从Zephyr官方GitHub Releases页面下载 zephyr-sdk-0.16.8_linux-x86_64.tar.xz(Linux)或对应macOS版本。
  2. 解压到目标目录:
    cd ~
    tar xf zephyr-sdk-0.16.8_linux-x86_64.tar.xz
    mv zephyr-sdk-0.16.8 zephyr-sdk
  3. 运行安装脚本:
    cd ~/zephyr-sdk
    ./setup.sh -t arm-zephyr-eabi -h

    -t 指定目标架构,-h 安装主机工具。安装脚本会自动配置udev规则和OpenOCD路径。

  4. 设置环境变量:将以下内容添加到 ~/.bashrc 或 ~/.zshrc:
    export ZEPHYR_SDK_INSTALL_DIR="$HOME/zephyr-sdk"
    export PATH="$ZEPHYR_SDK_INSTALL_DIR/sysroots/x86_64-pokysdk-linux/usr/bin:$PATH"
  5. 验证安装:
    arm-zephyr-eabi-gcc --version
    # 应输出类似 "arm-zephyr-eabi-gcc (Zephyr SDK 0.16.8) 12.2.0"
⚠️ 常见错误: 如果 setup.sh 提示缺少 python3 或 pip3,请先执行 sudo apt install python3 python3-pip(Ubuntu)或 brew install python3(macOS)。Windows用户建议使用WSL2 Ubuntu环境。

2.3 安装west工具与获取Zephyr源码

west是Zephyr项目的元构建工具,负责管理多仓库源码树、调用CMake构建以及设备烧录。它通过Python pip安装,并依赖一个 west.yml 清单文件来锁定所有依赖仓库的版本。

2.3.1 安装west

pip3 install --user west
# 确认安装成功
west --version
# 输出示例: West version: v1.2.0

2.3.2 初始化Zephyr工作区

mkdir ~/zephyr-workspace
cd ~/zephyr-workspace
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.6.0
west update

west init 会在当前目录创建 .west 配置目录和 zephyr 主仓库。west update 根据 west.yml 拉取所有模块(如 hal_stm32、cmsis、mcuboot 等),总大小约2-3GB。

west工作区目录结构 west工作区目录结构 zephyr-workspace/ .west/ (配置) zephyr/ (主仓库) modules/ (HAL等) tools/ (调试工具) bootloader/ (MCUboot) 💡 提示:west update 会递归拉取所有依赖,确保版本与 west.yml 中的 manifest 完全一致

2.4 安装Python依赖与导出Zephyr环境

Zephyr构建系统需要若干Python包,包括 pyelftools、anytree、canopen 等。推荐使用虚拟环境隔离依赖。

cd ~/zephyr-workspace
pip3 install --user -r zephyr/scripts/requirements.txt
# 导出Zephyr环境变量(每次新终端都需要执行)
source zephyr/zephyr-env.sh

将 source ~/zephyr-workspace/zephyr/zephyr-env.sh 添加到 ~/.bashrc 可避免每次手动导出。

2.5 创建第一个Hello World工程

现在环境已就绪,我们通过west创建一个示例工程并编译运行。目标板选择 QEMU Cortex-M3(无需真实硬件),验证工具链和构建系统是否正常工作。

2.5.1 创建工程

cd ~/zephyr-workspace
west create -p hello_sensor samples/hello_world
cd hello_sensor

west create 会从Zephyr内置示例复制 samples/hello_world 到当前工作区,并自动生成 CMakeLists.txt 和 prj.conf。

2.5.2 查看工程结构

文件/目录 说明
CMakeLists.txt CMake构建入口,指定源文件和依赖
prj.conf Kconfig配置,可启用I2C、GPIO等驱动
src/main.c 主程序源码,包含 main() 函数
boards/ (可选)板级覆盖配置

2.5.3 编译与运行

# 编译目标:qemu_cortex_m3
west build -b qemu_cortex_m3 .
# 启动QEMU运行
west build -t run

如果一切正常,QEMU窗口将输出:

*** Booting Zephyr OS build v3.6.0 ***
Hello World! qemu_cortex_m3
✅ 验证成功标志: 看到上述输出说明你的开发环境已完全就绪,工具链、west、QEMU均正常工作。后续章节将在此基础上添加I2C传感器驱动。

2.6 环境验证清单

在进入传感器驱动开发前,请逐项确认以下检查点:

  • SDK工具链:arm-zephyr-eabi-gcc --version 输出正常
  • west版本:west --version ≥ 1.2.0
  • Zephyr源码:~/zephyr-workspace/zephyr 目录存在且包含 Kconfig、CMakeLists.txt
  • Python依赖:pip3 list | grep pyelftools 已安装
  • QEMU运行:west build -b qemu_cortex_m3 -t run 输出Hello World
⚠️ 故障排查: 如果QEMU启动后无输出,请检查 prj.conf 中是否包含 CONFIG_SERIAL=y 和 CONFIG_CONSOLE=y。对于真实硬件,还需确认 CONFIG_UART_CONSOLE_ON_DEV_NAME 与板级DTS匹配。

2.7 本章小结

通过本章操作,你已成功搭建了完整的Zephyr开发环境,并验证了从源码编译到QEMU仿真的全链路。这个环境将作为后续I2C传感器驱动开发的基础平台。下一阶段我们将深入传感器驱动框架,学习如何编写第一个I2C设备驱动。