第二章:开发环境搭建——Zephyr SDK安装、west工具链配置、模拟器与硬件平台选择
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,很多初学者卡就卡在这一步——环境没配好,后面全是坑。我当年刚开始搞Zephyr的时候,光装SDK就折腾了一下午,后来发现是路径写错了。嗯,咱们今天争取半小时搞定。
2.1 Zephyr SDK:到底装哪个版本?
Zephyr SDK不是你想装哪个就装哪个的。它跟你的Zephyr主版本必须匹配。我个人习惯是直接用最新稳定版,但如果你在维护老项目,就得小心了。
核心原则:SDK版本号的前两位,必须和Zephyr内核版本一致。比如你用Zephyr 3.5,那就装SDK 0.16.x。
下载地址其实就一个:GitHub的Zephyr项目Release页面。别去第三方网站下,我吃过亏——有一次图快从某个镜像站下,结果工具链里缺了ARM的GDB,查了半天才发现。
安装步骤很简单,我直接给你命令:
# 下载SDK安装包
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
这里有个坑:setup.sh会帮你装udev规则和cmake包。但如果你用的是Ubuntu 22.04以上版本,可能会提示缺少某些依赖。别慌,缺什么装什么就行。
我的小技巧:装完SDK后,立刻把 export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk-0.16.8 写进你的 ~/.bashrc。不然每次开终端都要手动设,烦得很。
2.2 west工具链:Zephyr的“瑞士军刀”
west是Zephyr的元工具。说白了,它帮你管理项目、拉代码、编译、烧录一条龙。没有它,你手动搞会累死。
安装west很简单,用pip就行:
pip3 install west
但要注意,我建议你用Python虚拟环境。为什么?因为不同项目可能依赖不同版本的west。我曾经在一个服务器上同时维护三个Zephyr项目,版本从2.6到3.4都有,要不是用了虚拟环境,早就乱套了。
警告:别用系统自带的Python 2!Zephyr已经全面转向Python 3了。如果你还在用Python 2,赶紧换。
装完west后,初始化一个工作区:
west init zephyr-project
cd zephyr-project
west update
west update这一步会拉取所有模块,包括Zephyr内核、hal库、第三方驱动等。网速慢的话可能要等十几分钟。我建议你找个网络好的时段搞,或者用代理。
拉完代码后,你还需要导出Zephyr的cmake包:
west zephyr-export
这一步很多人会忘。忘了会怎样?编译的时候cmake找不到Zephyr的配置文件,报一堆莫名其妙的错。嗯,我当年就犯过这个错。
2.3 模拟器:没有开发板也能跑
说实话,不是每个人都有开发板。Zephyr支持多种模拟器,最常用的是QEMU和Native POSIX。
| 模拟器 | 适用场景 | 启动命令示例 |
|---|---|---|
| QEMU | ARM Cortex-M系列、RISC-V等嵌入式架构 | west build -b qemu_cortex_m3 samples/hello_world |
| Native POSIX | 直接在Linux上运行,调试方便 | west build -b native_posix samples/hello_world |
| QEMU x86 | 模拟x86平台,适合测试网络栈 | west build -b qemu_x86 samples/net/sockets/echo_server |
我个人最常用的是Native POSIX。为什么?因为它启动快,而且可以直接用GDB调试,不用折腾JTAG。你在Linux上跑一个Zephyr应用,感觉就像跑一个普通Linux进程一样。
避坑指南:我曾经在QEMU上调试一个UART驱动,死活收不到数据。后来发现是QEMU的串口模拟默认没连到终端。解决办法是加参数 -serial stdio。嗯,这种细节文档里写得不够清楚,得自己试。
2.4 硬件平台选择:别盲目跟风
选开发板这事,我见过太多人踩坑了。有人一上来就买最贵的,结果发现社区支持差,连个例程都跑不起来。也有人买最便宜的,结果发现Flash太小,稍微复杂点的应用就装不下。
我的建议是:
- 初学者首选:Nordic nRF52840 DK 或 STM32F4 Discovery。这两块板子社区资源多,遇到问题随便一搜就有答案。
- 想玩WiFi/BLE:ESP32系列。Zephyr对ESP32的支持越来越好了,而且价格便宜。
- 追求极致性能:NXP i.MX RT系列。Cortex-M7内核,跑600MHz没问题,适合做音视频处理。
- RISC-V尝鲜:SiFive HiFive1。虽然生态还不太成熟,但未来可期。
重要提醒:买板子之前,先去Zephyr的官方文档查一下“Supported Boards”列表。确认你的板子被官方支持,而不是只有第三方移植。第三方移植往往文档不全,出了问题你只能自己啃源码。
我记得有一次,一个学员买了块国产的RISC-V板子,说便宜又好用。结果折腾了两周,连个GPIO点灯都跑不起来。后来一查,Zephyr官方根本没支持这块板子,他用的那个移植版本还是两年前的。嗯,最后他还是换了块HiFive1。
2.5 验证环境:跑个Hello World试试
环境搭好了,咱们跑个最简单的例子验证一下。用QEMU模拟Cortex-M3:
cd zephyr-project
west build -b qemu_cortex_m3 samples/hello_world
west build -t run
如果看到终端输出 Hello World! qemu_cortex_m3,恭喜你,环境搭好了。
如果你用的是Native POSIX:
west build -b native_posix samples/hello_world
./build/zephyr/zephyr.exe
注意,Native POSIX编译出来的是一个Linux可执行文件,直接运行就行。退出的话按 Ctrl+C。
常见问题:如果你在运行 west build -t run 时提示找不到QEMU,说明你的SDK没装全。回去重新跑一遍 setup.sh,或者手动安装QEMU:sudo apt install qemu-system-arm。
好了,环境搭建就到这里。下一章咱们开始真正接触Zephyr的中断系统——那才是实时系统的核心。你想想看,没有中断,你的CPU就得一直轮询,那还谈什么实时性?
嗯,今天就到这。有问题随时找我。