Zephyr RTOS 5 步上手:从环境搭建到烧录 Blinky 闪灯
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
Zephyr RTOS 是面向资源受限设备的实时操作系统(RTOS,负责毫秒级任务调度与中断响应),支持 ARM、x86、RISC-V 等架构,从传感器节点到复杂设备都能跑。本文面向只写过 C、没碰过 Zephyr 的读者,按文操作后你能在 Ubuntu 上装好工具链、编译 blinky 示例并烧录到开发板。
它是什么,适合谁
Zephyr 是 Linux 基金会下的开源嵌入式 RTOS,一套内核代码跑在 ARM、RISC-V、x86、Xtensa 等几十种芯片上,内核裁剪后最小只有几 KB,适合做 MCU 产品固件的人。
- 多架构:ARM、x86、RISC-V 共用同一套 API,换板子只换构建参数
- 服务齐全:线程、定时器、信号量、消息队列、中断管理全在 kernel/ 里
- 驱动库大:GPIO、I2C、SPI、串口、以太网等驱动开箱即用
- 安全内建:MPU 内存保护、栈溢出检测、驱动权限控制是默认能力
- 板卡目录:仓库 boards/ 目录收录上千块开发板,直接按名构建
环境怎么准备
先确认三个关键工具的最低版本:
| 工具 | 最低版本 |
|---|---|
| CMake | 3.28.0 |
| Python | 3.12 |
| 设备树编译器 dtc | 1.4.6 |
以 Ubuntu 为主路径,一条命令装齐依赖:
sudo apt install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget python3-dev python3-venv \ python3-tk xz-utils file make gcc g++ libsdl2-dev libmagic1接着建工作空间、拉源码、装工具链(west 是 Zephyr 的工作区管理命令,类似"包管理器"):
python3 -m venv ~/zephyrproject/.venv source ~/zephyrproject/.venv/bin/activate pip install west west init -m https://gitcode.com/GitHub_Trending/ze/zephyr ~/zephyrproject cd ~/zephyrproject west update west packages pip --install west zephyr-export cd zephyr west sdk installmacOS 用 Homebrew 装依赖、Windows 用 winget,步骤一致,分别见 installation_mac.rst 和 installation_win.rst。
🏃 跑通第一个示例:blinky 闪灯
仓库自带 blinky 示例,目录结构就三个文件:
blinky/ ├── src/main.c # 应用入口 ├── CMakeLists.txt # 构建描述 └── prj.conf # 配置项核心逻辑见 samples/basic/blinky/src/main.c,截取关键行:
#define LED0_NODE DT_ALIAS(led0) static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios); int main(void) { if (!gpio_is_ready_dt(&led)) { return 0; } gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE); while (1) { gpio_pin_toggle_dt(&led); k_msleep(1000); } }编译并烧录,把<your-board-name>换成你的板名:
cd ~/zephyrproject/zephyr west build -p always -b <your-board-name> samples/basic/blinky west flash不确定板名就用west boards列全部受支持板卡;暂时没有板子,可改构建 hello_world 示例并用-b qemu_x86在模拟器里验证编译。
你会看到:板载 LED 每 1 秒翻转一次,串口控制台同步打印当前 LED 状态。
绕不开的三个概念
设备树(Devicetree):一份描述"板子上有什么硬件、接在哪个引脚"的文本,编译时合进程序。代码不写死引脚,而是通过别名查找:
led0: led_0 { compatible = "gpio-leds"; gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; };prj.conf 配置:一行一个KEY=VALUE,决定编译进哪些内核功能。blinky 的全部配置只有一行CONFIG_GPIO=y;想图形化勾选,执行west build -t menuconfig。
构建系统:west 只是封装,底层是 CMake + Ninja。记住三条命令就够:
west build -b <板名>:编译west flash:烧录west debug:进 GDB 调试
🛠 卡住了怎么办
现象:构建报
led0相关错误 /gpio_dt_spec未声明原因:这块板子的设备树里没定义led0别名解法:换支持 blinky 的板子,或改跑 hello_world 示例现象:
west: command not found原因:虚拟环境没激活解法:执行source ~/zephyrproject/.venv/bin/activate,每个新终端都要重来一次现象:
west flash找不到板子原因:缺烧录工具或 Linux 下 USB 权限不足解法:先装该板文档要求的宿主工具,再为调试探针配置 udev 规则现象:
west update拉取模块中途失败原因:网络中断或镜像源问题解法:直接重跑west update续传,仍失败就更换 manifest 仓库镜像现象:编译通过但 LED 不闪原因:该板的用户 LED 没接 GPIO 或别名不是
led0解法:查板卡文档里的别名定义,必要时加 overlay 修正
接下来去哪
- 官方文档入口:doc/index.rst,内核、设备树、构建各有专章
- 示例总目录:samples/,网络、蓝牙、USB 等上千个示例
- 板卡目录:boards/index.rst,查你的板子受不支持、目标名怎么填
- 社区入口:邮件列表 users@lists.zephyrproject.org 提问,Discord 实时讨论,issue 报 bug
Zephyr 把"写 C、编译、烧录"压成了三条 west 命令,同一份代码换板就能跑。下一步建议挑一个 ADC 或串口示例在你的板子上构建一遍,并随手翻翻 kernel/ 里的调度器源码。踩坑过程欢迎去社区同步你的解法。
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考