2、开发环境搭建:Zephyr SDK安装、West工具配置、目标板选择(nRF52840/STM32)、串口与JLink驱动安装

好,咱们正式开始动手了。

这一章,说白了就是「把家伙事儿备齐」。我见过太多人卡在环境搭建这一步,一卡就是一整天。其实没那么玄乎,跟着我一步步来,半小时内搞定。

2.1 Zephyr SDK 安装——别选错版本

Zephyr SDK 不是 Zephyr 源码,它是一套编译工具链。包括 GCC、Newlib、GDB 等。你想想看,没有它,你的代码怎么变成二进制文件?

下载地址:Zephyr 官方 GitHub Releases 页面。

我个人习惯用 zephyr-sdk-0.16.8 版本,稳定,坑少。别追最新版,最新版有时候会有兼容性问题。

安装步骤(Linux / macOS / WSL2):

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

# 2. 解压到 /opt 目录(需要 sudo)
sudo tar xf zephyr-sdk-0.16.8_linux-x86_64.tar.xz -C /opt

# 3. 运行安装脚本
cd /opt/zephyr-sdk-0.16.8
sudo ./setup.sh

# 4. 设置 udev 规则(重要!否则 JLink 无法识别)
sudo cp /opt/zephyr-sdk-0.16.8/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules

我的经验: 如果你用的是 Windows,强烈建议用 WSL2 + Ubuntu 22.04。原生 Windows 下 Zephyr 的体验……嗯,我只能说「谁用谁知道」。我曾经在 Windows 上折腾了三天,最后换 WSL2 半小时搞定。

2.2 West 工具配置——Zephyr 的「瑞士军刀」

West 是 Zephyr 的元构建工具。它负责拉取源码、管理模块、编译烧录。说白了,你以后所有操作都离不开它。

安装 West:

# 确保 Python 3.8+ 已安装
pip3 install west

# 验证安装
west --version

初始化工作空间:

# 创建一个工作目录(名字随意,我用 zephyr_workspace)
mkdir zephyr_workspace
cd zephyr_workspace

# 初始化 west
west init

# 拉取所有模块(这一步会下载 Zephyr 源码 + 所有依赖,约 2-3GB)
west update

注意: west update 这一步非常慢,取决于你的网络。我建议用代理,或者直接去 GitHub 下载 release 包。我曾经在客户现场,网络差到 west update 跑了两个小时……后来我都是提前把源码打包带过去。

导出 Zephyr 环境变量:

# 把下面这行加到 ~/.bashrc 或 ~/.zshrc 中
export ZEPHYR_BASE=~/zephyr_workspace/zephyr
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk-0.16.8

# 然后 source 一下
source ~/.bashrc

2.3 目标板选择——nRF52840 还是 STM32?

这个问题我经常被问到。我的回答是:看你做什么。

特性 nRF52840 STM32(如 STM32F4/F7/H7)
无线能力 BLE 5.0、Thread、Zigbee、NFC 无(需外挂模块)
处理性能 ARM Cortex-M4F @64MHz ARM Cortex-M4/M7 @100-400MHz
Flash/RAM 1MB / 256KB 512KB-2MB / 128KB-1MB
OTA 支持 原生 MCUboot + BLE DFU 需自行移植 MCUboot
调试器 板载 JLink OB ST-Link / JLink
价格 稍贵(约 ¥80-150) 便宜(约 ¥20-80)

我的建议:

  • 如果你要做 BLE OTA 升级,无脑选 nRF52840。Nordic 的 BLE 协议栈成熟度,目前没有对手。
  • 如果你要做以太网或高性能场景,选 STM32。比如 STM32H743,跑 480MHz,做网关很合适。
  • 如果你只是学习,两个都买。nRF52840 DK 和 STM32F4 Discovery 都不贵。

2.4 串口与 JLink 驱动安装

串口和调试器,是嵌入式工程师的「眼睛」和「手」。没有它们,你连 printf 都看不到。

2.4.1 串口驱动

nRF52840 DK 和 STM32 开发板,板载的串口芯片通常是 CP2102 或 CH340。

  • Windows: 自动识别,或去 Silicon Labs / WCH 官网下载驱动。
  • Linux: 内核自带驱动,插上就能识别为 /dev/ttyUSB0/dev/ttyACM0
  • macOS: 同样免驱,识别为 /dev/cu.usbserial-xxxx

避坑指南: 我曾经遇到一个情况,串口插上后没反应。折腾了半天,发现是 USB 线只能充电不能传数据。嗯,换根好点的 USB 线吧。

2.4.2 JLink 驱动

JLink 是 Segger 公司的调试器。nRF52840 DK 板载的就是 JLink OB。

# 下载 JLink 软件包(Linux 版本)
wget https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb

# 安装
sudo dpkg -i JLink_Linux_x86_64.deb

# 验证安装
JLinkExe

如果出现 JLinkExe: command not found,说明没装好。检查一下 udev 规则是否生效。

重要提醒: JLink 的 udev 规则一定要配好。否则你插上开发板,JLink 根本认不出来。我之前在 Ubuntu 20.04 上就踩过这个坑,折腾了一下午才发现是 udev 规则没生效。

2.5 验证环境——跑个 Hello World

环境搭好了,咱们跑个最简单的例子验证一下。

# 进入 Zephyr 源码目录
cd ~/zephyr_workspace/zephyr

# 编译 Hello World(以 nRF52840 DK 为例)
west build -b nrf52840dk_nrf52840 samples/hello_world

# 烧录
west flash

如果一切顺利,你会看到串口输出:

*** Booting Zephyr OS build v3.5.0 ***
Hello World! nrf52840dk_nrf52840

看到这行输出,恭喜你——环境搭建成功!

嗯,到这里,开发环境就全部搞定了。下一章咱们开始真正接触 OTA 升级的核心——MCUboot 引导程序。那才是重头戏。


公众号:蓝海资料掘金营,微信deep3321