第二章 开发环境搭建:Linux与Windows下的Zephyr SDK安装、west工具链配置、模拟器与硬件板支持

说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多人卡在第一步,明明代码逻辑没问题,就是编译不过。说白了,环境没配好。

这一章,我就带你把这套环境捋顺了。不管你是用Linux还是Windows,咱们都给它整明白。

2.1 操作系统选择:Linux还是Windows?

先聊个实在的。我个人习惯用Linux做Zephyr开发。为什么?因为Zephyr的底层工具链,很多都是Linux原生的。你在Linux下编译,基本不会遇到路径问题、权限问题这些幺蛾子。

但如果你只有Windows机器,也别慌。Zephyr官方对Windows的支持已经相当成熟了。我去年带的一个项目,团队里一半人用Windows,一半人用Linux,最后代码都能跑通。

我的建议: 如果你是新手,优先选Ubuntu 22.04 LTS。如果必须用Windows,记得用WSL2,别用原生CMD。

2.2 Linux下的SDK安装

好,咱们先从Linux开始。我假设你用的是Ubuntu,其他发行版大同小异。

2.2.1 安装依赖包

先装一些基础工具。打开终端,执行:

sudo apt update
sudo apt install --no-install-recommends git cmake ninja-build gperf \
  ccache dfu-util device-tree-compiler wget \
  python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
  make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1

嗯,这里要注意。如果你用的是Ubuntu 20.04,可能还需要手动装一个python3-venv。我遇到过有人在这步卡了半天,就是因为少了这个包。

2.2.2 安装Zephyr SDK

接下来是重头戏。Zephyr SDK包含了交叉编译工具链,没有它,你的代码就只是一堆文本。

cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.8/zephyr-sdk-0.16.8_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.8_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.8
./setup.sh

跑完setup.sh,它会自动把工具链路径加到你的环境变量里。但有时候它不会自动生效。我建议你手动检查一下:

echo $ZEPHYR_SDK_INSTALL_DIR

如果输出是空的,那就手动加一下:

echo 'export ZEPHYR_SDK_INSTALL_DIR="$HOME/zephyr-sdk-0.16.8"' >> ~/.bashrc
source ~/.bashrc
注意: 不同版本的SDK,路径名可能不一样。我建议你下载前先去GitHub看看最新版本号。我曾经因为用了旧版SDK,编译时死活找不到某个头文件,折腾了两天才发现是版本不匹配。

2.3 Windows下的环境搭建

Windows用户看过来。我强烈建议你用WSL2(Windows Subsystem for Linux)。说白了,就是在Windows里跑一个轻量级的Linux虚拟机。

2.3.1 安装WSL2

打开PowerShell(管理员模式),执行:

wsl --install -d Ubuntu-22.04

装完之后重启电脑。然后进入WSL2终端,后面的步骤就跟Linux一模一样了。

你可能会问:「为什么不用原生Windows?」嗯,我试过。Zephyr的west工具在原生Windows下,路径分隔符、换行符这些细节会搞出各种奇怪的问题。用WSL2,这些问题全没了。

2.3.2 安装Python和pip

在WSL2里,Python通常已经装好了。但保险起见,检查一下:

python3 --version

如果版本低于3.8,建议升级。我一般用pyenv来管理Python版本,这样不会污染系统环境。

2.4 west工具链配置

west是Zephyr的瑞士军刀。它负责下载代码、管理模块、编译烧录,几乎所有的操作都离不开它。

2.4.1 安装west

pip3 install west

装完之后,验证一下:

west --version

如果能看到版本号,说明装好了。如果提示command not found,那大概率是pip的bin目录没加到PATH里。我遇到过这种情况,解决办法是:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2.4.2 初始化Zephyr工作区

接下来,我们要用west来拉取Zephyr的源码。这个过程会下载整个Zephyr仓库,大概几百兆,网速慢的话得等一会儿。

west init ~/zephyrproject
cd ~/zephyrproject
west update

west update这一步,它会根据west.yml里的配置,把Zephyr依赖的所有模块都下载下来。你想想看,Zephyr支持几百种开发板,每个板子都有自己的驱动、配置,这些全靠west来管理。

2.4.3 导出Zephyr环境变量

cd ~/zephyrproject
pip3 install -r zephyr/scripts/requirements.txt
west zephyr-export

这一步会把Zephyr的路径信息写到你的环境变量里。以后你每次打开终端,都能直接使用west build命令。

小技巧: 我习惯把source ~/zephyrproject/zephyr/zephyr-env.sh加到.bashrc里。这样每次打开终端,环境自动就配好了,不用手动执行。

2.5 模拟器支持:QEMU

没有开发板怎么办?用QEMU。它可以在你的电脑上模拟一个ARM或RISC-V的芯片。

2.5.1 安装QEMU

Linux下直接装:

sudo apt install qemu-system-arm qemu-system-riscv32 qemu-system-riscv64

Windows下,如果你用了WSL2,也是在WSL2里装。别在Windows原生环境里装QEMU,那玩意儿配置起来太痛苦了。

2.5.2 编译并运行一个示例

我们来跑一个最简单的hello world,验证环境是否配好了。

cd ~/zephyrproject
west build -b qemu_cortex_m3 zephyr/samples/hello_world
west build -t run

如果一切正常,你会看到终端里打印出Hello World! qemu_cortex_m3。看到这行字,说明你的环境已经彻底配好了。

我记得第一次跑通的时候,心里还挺激动的。虽然只是个hello world,但背后是几十个工具链、几百个依赖包在协同工作。

2.6 硬件板支持

模拟器终究是模拟器。真刀真枪干项目,还是得上硬件。

2.6.1 支持的开发板列表

Zephyr支持的板子非常多。你可以用这个命令查看:

west boards

输出会很长,我截取几个常见的:

开发板 架构 厂商
nrf52840dk_nrf52840 ARM Cortex-M4 Nordic
stm32f429i_disc1 ARM Cortex-M4 ST
esp32 Xtensa LX6 Espressif
mimxrt1060_evk ARM Cortex-M7 NXP

2.6.2 为特定板子编译

假设你手里有一块nRF52840 DK,编译命令是这样的:

west build -b nrf52840dk_nrf52840 zephyr/samples/hello_world

编译完成后,烧录:

west flash

这里有个坑。不同的板子,烧录方式不一样。nRF52840用JLink,STM32用ST-Link,ESP32用串口。west flash会自动检测你的调试器,但有时候会识别错。

避坑指南: 我曾经用一块STM32F4的板子,west flash一直报错。折腾了半天,发现是调试器的驱动没装好。Windows下记得装ST-Link的驱动,Linux下要确保有udev规则。

2.7 常见问题与排查

最后,我总结几个我遇到过的高频问题,你碰到了可以直接对照排查。

  • 编译时报错找不到头文件:多半是west update没跑,或者west zephyr-export没执行。
  • west命令找不到:检查pip的bin目录是否在PATH里。我建议用pip3 show west查看安装位置。
  • 烧录失败:先确认板子是否被电脑识别。Linux下用lsusb,Windows下看设备管理器。
  • QEMU跑不起来:检查是否装了对应的qemu-system包。ARM的代码要用qemu-system-arm,别搞混了。

嗯,环境搭建这部分就这些了。说白了,就是装工具、拉代码、配路径这三步。每一步都有固定的套路,你照着做,基本不会出大问题。

下一章,咱们开始写真正的Zephyr应用。到时候你会发现,环境搭好了,后面的路就顺了。