开源 Zephyr:现代嵌入式 RTOS 长什么样
做嵌入式产品时,RTOS 往往逃不过两道选择题:要么上 FreeRTOS——内核小、到处都有移植,但网络、文件系统、安全、也要自己移植;要么上 Linux——生态完整,但功耗、启动速度和内存开销,在 MCU 面前常常“算不过账”来。「要联网、要安全、要多板复用,却还想跑在资源受限设备上」的地带,长期缺一张标准答卷。
Zephyr 就是这张答卷:一份由 Linux 基金会托管的开源 RTOS,面向资源受限设备,强调可扩展、可裁剪、安全优先,并用 Devicetree + Kconfig + West 把「硬件长什么样」和「软件编进什么」拆清楚。GitHub 主仓长期 1.5 万+ 星,板卡与架构支持面很宽——从环境传感器、可穿戴,到网关、控制器都能往上挂。
它不是「又一个只提供 task / queue 的小内核」。更贴切的说法是:带现代构建与硬件描述习惯的嵌入式操作系统——内核之外,驱动模型、网络栈、蓝牙、传感器框架、电源管理都不需要再移植。
- 官网 / 文档:https://www.zephyrproject.org · https://docs.zephyrproject.org
- 源码:github.com/zephyrproject-rtos/zephyr
- 许可:Apache 2.0
- 托管:Linux Foundation 旗下 Zephyr Project
一、它到底是什么
名字来自希腊神话的西风;工程上你更该记住它的气质:小内核起步,模块按需长高。官方定位是 scalable real-time OS,优化资源受限场景,并把安全写进设计目标。
核心可以记五件事:
| 关键词 | 含义 |
|---|---|
| 小 footprint 内核 | 协作 / 抢占线程、信号量、互斥、消息队列、内存池等齐全 |
| 多架构 | Cortex-M/R/A、RISC-V、x86、Xtensa、ARC……板级列表很长 |
| Devicetree | 用设备树描述板级硬件与启动配置(很像嵌入式里的「硬件说明书」) |
| Kconfig | 用配置符号决定编进哪些软件能力(网络、哪路驱动、哪套协议) |
| West + CMake | 多仓工作区、统一构建;示例与板支持是一等公民 |
它不是 Linux,也不会假装自己是。没有完整用户态发行版那套玩法;强项是 MCU / 中低端 MPU 上把实时、驱动和连接做成可维护的工程。和 FreeRTOS 比,Zephyr 更「整机」;和 Linux 比,Zephyr 更「嵌入」。

| FreeRTOS(典型用法) | Linux | Zephyr | |
|---|---|---|---|
| 内核 | 极小,调度原语强 | 完整通用 OS | 小内核 + 丰富子系统 |
| 板级描述 | 多靠 BSP / 厂商工程 | Device Tree 等 | Devicetree 一等公民 |
| 网络 / BLE | 常外挂协议栈 | 原生很强 | 项目内栈与子系统完整 |
| 资源 | 最省 | 偏重 | 可裁剪到 MCU |
| 学习曲线 | 低 | 中高 | 中(工具链与 DT 要适应) |
二、三个常见误解
≠ 只能跑在「很大的 MCU」上。
Zephyr 的卖点之一就是资源受限设备。功能开全会变重;按 Kconfig 裁剪后,传感器节点、BLE 外设一类场景是主场。别拿「默认示范配置的体积」当成下限。
≠ 和 Linux 设备树是同一套东西。
概念相近——都用 DTS 描述硬件——但绑定、代码生成、和 Kconfig 的分工是 Zephyr 自己的流程。把 Linux DTS 原样拷进来通常行不通;要以 Zephyr bindings 与板级目录为准。
≠ 学完内核 API 就等于会做产品。
真正耗时间的往往是:选板 / 写 overlay、配 prj.conf、接驱动、过 west 构建。内核服务学起来并不可怕;工程骨架才是第一道坎。
三、架构:硬件说明书 + 软件开关 + 内核服务
可以把一次构建理解成两条线拧在一起:

软件栈从下往上看:

| 层 | 干什么 | 你实际碰到的东西 |
|---|---|---|
| 应用 | 业务线程、协议、UI | main、线程、子系统 API |
| 子系统 | 网络、蓝牙、传感器、PM、文件… | net、bluetooth、sensor 等 |
| 驱动模型 | 统一 device 初始化与访问 | DEVICE_DT_GET、驱动 API |
| 内核 | 调度、同步、内存、中断 | 线程、信号量、工作队列 |
| Arch / SoC / Board | 启动、中断控制器、时钟、引脚 | boards/、SoC 包、overlay |
| 工具链 | 配置与构建 | West、CMake、Kconfig、DTS |
上手时真正会碰到的,多半是下面几条:
-
Devicetree(硬件有什么)
板级.dts/ overlay 描述 UART、SPI、LED、按键、Flash 布局等。文档原则:硬件与启动期配置用 DT;软件功能取舍用 Kconfig。 -
Kconfig /
prj.conf(软件编什么)
开不开网络、用哪套日志、要不要 shell——改配置符号,而不是满仓库#ifdef手工砍。 -
驱动与子系统 API
同一套 device 模型跨板复用;传感器、显示、蓝牙等尽量走统一接口,换板时少改业务代码。 -
West 工作区
Zephyr 常常不是「单仓 clone 完事」,而是 west 管理的多仓清单。版本对齐、模块拉取,都靠它。 -
可选安全能力
依架构可走 MPU / 用户空间等路径;安全是设计目标之一,不是贴牌口号——具体能力仍以你选的 SoC 与配置为准。
四、常见落地形态

| 形态 | 说明 |
|---|---|
| Cortex-M 传感器 / 可穿戴 | 低功耗、BLE、传感器框架,Zephyr 样板最多的一类 |
| 无线 MCU 物联网节点 | Wi-Fi / 802.15.4 / BLE 组合,看板级与射频支持 |
| 工业控制与网关侧 MCU | 实时线程 + 协议栈 + 可靠外设,替代「FreeRTOS 自拼全家桶」 |
| 仿真与 CI(QEMU 等) | 没板也能跑通构建与部分测试,适合团队协作 |
芯片厂商与社区为大量开发板维护了 boards 支持。下单前以 Supported Boards 实时列表为准——列表上有名字,不等于你淘到的兼容板外设丝毫不差。
五、谁适合用、谁不适合
多半会喜欢的:
- 产品要 多板 / 多 SoC 复用,讨厌每个项目重写一份 BSP 八股
- 需要 BLE / 网络 / 传感器 等现成子系统,而不是只从 task 开始砌
- 团队能接受一点 Devicetree + Kconfig 学习成本,换长期可维护性
- 关注 开源许可清晰(Apache 2.0) 与基金会治理
- 和 LVGL 等组件组合:Zephyr 管系统,LVGL 管界面(很常见的搭配)
建议别硬上的:
- 只要十来个任务、无协议栈、板子永不更换——裸机或精简 FreeRTOS 可能更快
- 必须跑完整 Linux 用户态、容器、复杂桌面应用——那是 Linux 的活
- 完全拒绝看文档、只想「双击工程就下载」——Zephyr 更偏命令行与 west 工作流
- 把过时博客里的 API 当圣经——请对齐你 checkout 的文档版本
六、怎么动手
- 装依赖与 West——按官方 Getting Started,把工具链和 west 装到能跑
- 拉工作区——
west init/west update,不要只稀里糊涂 git clone 一个残缺树 - 选一块官方支持明确的板——Nordic、ST、NXP、Espressif 等生态里「blinky / hello_world」最省心
- 先跑官方 sample——
hello_world、blinky、再试bluetooth或sensor类示例 - 再改自己的
prj.conf+ overlay——先点亮、再加外设,最后才上业务协议
七、和 FreeRTOS、RT-Thread、NuttX 怎么选
| 方案 | 一句话 |
|---|---|
| FreeRTOS | 内核标准件,生态散落在各家 BSP 与中间件 |
| RT-Thread | 国产生态友好,组件丰富,和国内供应链故事近 |
| NuttX | POSIX 味道重,像「微型 Unix」 |
| Zephyr | Devicetree + 子系统完整,基金会治理,多架构板级支持面广 |
八、优缺点
优点
- 现代工程习惯:DT 描述硬件、Kconfig 裁软件、West 管多仓
- 子系统完整:连接、传感器、PM、驱动模型不必从零拼
- 架构与板级支持面宽,厂商参与度高
- Apache 2.0,治理结构清晰
- 与 LVGL、各类协议栈组合故事成熟
缺点
- 学习曲线高于「只学 FreeRTOS API」
- 工作区与版本对齐偶尔折磨人(west / 模块版本要认真)
- 默认功能开多时体积与复杂度上升,裁剪是必修课
- 冷门外设仍可能要自己写驱动与 binding
没有完美 RTOS,只有 你的产品更适合哪一种:极简调度、国内组件生态,还是一套可移植的现代嵌入式 OS 骨架。
九、写在最后
下次再为传感器节点、可穿戴或物联网控制器选底座时,不妨多问一句:我们要的是一个调度器,还是一个能跟着板子搬家的嵌入式操作系统?
Zephyr 把路走宽了:宽在架构与子系统;又用 Devicetree / Kconfig 把复杂度关进配置,而不是关进一堆不可移植的 #ifdef。宽的好处是,官方 sample 和板级支持能把「从零到闪灯联网」压缩到一个周末能验证的长度——前提是你愿意先把 west 和设备树这关过掉。

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)