Zephyr OS驱动实战:I2C触摸屏驱动调试与校准 - 第2节

2.1 West 工具与 Zephyr SDK 概述

Zephyr RTOS 的官方构建与包管理工具是 West(Zephyr’s meta-tool)。West 负责源码拉取、多仓库管理、构建配置与烧录调度。SDK 则提供跨平台编译器、调试器与目标架构支持。两者配合可完成从零到烧录的全流程。

核心概念速查表
组件 作用 典型版本/路径
West Zephyr 元工具,管理 manifest、多仓库、构建与烧录 ≥ 1.2.0(pip 安装)
Zephyr SDK 交叉编译工具链、QEMU、OpenOCD、GDB 0.16.8(Linux)/ 0.16.5(macOS)
Zephyr 源码 内核、驱动、子系统、示例工程 v3.7.0(LTS)
应用工作区 用户自定义工程目录,包含 CMakeLists.txt 与 prj.conf ~/zephyr_workspace/my_app
West 工具链与 Zephyr SDK 关系图 West 元工具 Zephyr SDK Zephyr 源码树 应用工作区 arm-zephyr-eabi-gcc drivers / kernel / subsys CMakeLists.txt + prj.conf

2.2 安装 West 与 Zephyr SDK

2.2.1 安装 West

West 是 Python 包,推荐使用 Python 虚拟环境隔离系统 Python。

# 创建并激活虚拟环境(可选但推荐)
python3 -m venv ~/zephyr_venv
source ~/zephyr_venv/bin/activate

# 安装 west
pip install west

# 验证安装
west --version
提示: 如果系统同时存在 Python 2 与 Python 3,请确保使用 python3 和 pip3。West 要求 Python ≥ 3.8。

2.2.2 安装 Zephyr SDK

Zephyr SDK 提供目标架构的交叉编译器。以 Linux x86_64 主机为例:

# 下载 SDK 安装包(以 0.16.8 为例)
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.8/zephyr-sdk-0.16.8_linux-x86_64.tar.xz

# 解压到 /opt
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

# 设置环境变量(建议写入 ~/.bashrc)
export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk-0.16.8
SDK 组件 说明 常用命令
arm-zephyr-eabi-gcc ARM Cortex-M/R/A 交叉编译器 arm-zephyr-eabi-gcc --version
OpenOCD 片上调试器,支持 ST-Link / J-Link openocd --version
QEMU 模拟运行 Zephyr 目标 qemu-system-arm --version
GDB 交叉调试器 arm-zephyr-eabi-gdb --version

2.3 创建第一个 Zephyr 工程

2.3.1 初始化工作区

使用 West 初始化一个包含 Zephyr 源码与所有模块的工作区:

# 创建工作区目录
mkdir ~/zephyr_workspace && cd ~/zephyr_workspace

# 初始化 manifest(默认拉取最新 LTS)
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.7.0

# 拉取所有模块(约 2-5 分钟,取决于网络)
west update
注意: west update 会下载约 2GB 数据,包含 HAL、驱动库、第三方模块。请确保网络稳定。如果下载中断,可重复执行 west update 继续。

2.3.2 导出 Zephyr CMake 包

为了让 CMake 能找到 Zephyr 构建系统,需要导出包路径:

# 从工作区根目录执行
west zephyr-export

# 设置 Zephyr 基础环境变量(每次新终端都需要执行)
source ~/zephyr_workspace/zephyr/zephyr-env.sh

2.3.3 创建应用工程

以 Zephyr 内置的 hello_world 为模板,创建第一个工程:

# 复制示例到工作区
cp -r ~/zephyr_workspace/zephyr/samples/hello_world ~/zephyr_workspace/my_first_app

# 查看工程结构
cd ~/zephyr_workspace/my_first_app
tree -L 2

工程结构如下:

my_first_app/
├── CMakeLists.txt          # 构建定义
├── prj.conf                # 内核配置
├── src/
│   └── main.c              # 应用源码
└── boards/                 # (可选)板级覆盖
Zephyr 工程创建流程 west init west update west zephyr-export source env.sh cp samples/hello_world 修改 prj.conf west build west flash

2.4 编译与烧录

2.4.1 编译工程

使用 west build 命令指定目标板与构建目录:

# 进入工程目录
cd ~/zephyr_workspace/my_first_app

# 编译(以 STM32F429 Discovery 为例)
west build -b stm32f429_disc1 -d build

# 编译输出说明
# -b : 指定 board 名称
# -d : 指定构建目录(默认 build)

# 查看编译产物
ls build/zephyr/
# zephyr.elf   zephyr.bin   zephyr.hex   zephyr.map
Board 名称 目标芯片 调试器 常见用途
stm32f429_disc1 STM32F429ZIT6 ST-Link/V2 I2C 触摸屏调试
nrf52840dk_nrf52840 nRF52840 J-Link OB 低功耗 I2C 传感器
mimxrt1060_evk i.MX RT1060 J-Link / DAPLink 高性能 I2C 显示
qemu_cortex_m3 QEMU 模拟 无硬件 快速原型验证

2.4.2 烧录到目标板

确保开发板通过 USB 连接主机,并已安装驱动(如 ST-Link 驱动):

# 烧录固件
west flash -d build

# 如果使用 J-Link,可指定烧录器
west flash -d build --runner jlink

# 烧录成功后,串口输出(默认 115200 8N1)
# ***** Booting Zephyr OS v3.7.0 *****
# Hello World! stm32f429_disc1
调试技巧: 使用 west debug 可启动 GDB 调试会话,配合 OpenOCD 实现断点、单步、变量查看。对于 I2C 触摸屏驱动调试,建议在 prj.conf 中开启 CONFIG_I2C_LOG_LEVEL_DBG=y 以获取 I2C 总线日志。

2.4.3 常见编译错误与解决

  • 错误: west: command not found → 未激活虚拟环境或未安装 West,执行 pip install west。
  • 错误: ZEPHYR_BASE undefined → 未执行 source zephyr-env.sh。
  • 错误: No board named 'stm32f429_disc1' → Board 名称拼写错误或未执行 west update 拉取板级支持。
  • 错误: OpenOCD: Error: unable to find CMSIS-DAP device → 驱动未安装或 USB 线缆问题,检查 lsusb 是否识别到 ST-Link。
编译与烧录流程 west build -b <board> CMake 配置 编译链接 生成 .elf/.bin west flash OpenOCD 烧录 串口输出验证

2.5 验证开发环境

完成上述步骤后,执行以下命令验证环境完整性:

# 1. 检查 West 版本
west --version

# 2. 检查 SDK 编译器
arm-zephyr-eabi-gcc --version

# 3. 检查 Zephyr 基础路径
echo $ZEPHYR_BASE

# 4. 列出可用 board
west boards | grep stm32f429

# 5. 编译并烧录 hello_world
cd ~/zephyr_workspace/my_first_app
west build -b stm32f429_disc1 -d build
west flash -d build
环境验证清单:
  • ☑ West ≥ 1.2.0
  • ☑ SDK 编译器可执行
  • ☑ ZEPHYR_BASE 指向正确路径
  • ☑ 目标 board 在 west boards 列表中
  • ☑ 编译无错误,生成 zephyr.elf
  • ☑ 烧录后串口输出 "Hello World!"