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 |
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/ # (可选)板级覆盖
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。
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!"