# [搬运] 嵌入式操作系统


> [!IMPORTANT]
> 本文整理的所有内容都来自 YouTube 频道“Techs Explained”发布的视频《Every Embedded Operating System Explained in 9 Minutes》。
> Link: [Every Embedded Operating System Explained in 9 Minutes](https://www.youtube.com/watch?v=R7dhNELFc9A)

---

# 嵌入式操作系统

## Bare metal（裸机）

把一切抽象层、操作系统和调度器都剥掉，剩下的就是裸机编程。它伴随最早的单片机一起诞生于 1970 年代——但严格来说，裸机根本不是操作系统。

你的整个代码库都运行在一个连续的 `while(1)` 超级循环里，直接操作硬件寄存器，并响应物理硬件中断。因为没有内核或调度器消耗时钟周期，单片机的整个 ROM 和 Flash 都完全留给应用代码。上电那一刻，硅片上的执行即刻开始，带来零内核开销、极低的功耗和微秒级的执行延迟。

代价是：在单一循环里管理复杂的多步状态机会迅速写出臃肿、难以维护的代码。如果某个函数在等待慢速传感器读取或外部总线响应时卡住，整个系统就会冻结——除非每一次外设交互都用复杂的非阻塞逻辑精心编写。此外，它没有内建的文件系统、网络驱动或内存保护，所有底层外设驱动都必须自己编写或手动引入。

你会在电动牙刷、电视遥控器、电动工具安全联锁、低成本传感器节点和低功耗汽车控制模块这类简单的 8 位、32 位单片机里看到裸机代码。

## FreeRTOS

当嵌入式项目超出简单执行循环的规模时，开发者会升级到 FreeRTOS。它由 Richard Barry 于 2003 年创建，2017 年被 Amazon Web Services 正式收购，是全球部署最广的单片机开源实时操作系统。

它不再把所有东西放进一个循环，而是把应用拆成由一个小型抢占式实时内核管理的独立并发任务。调度器持续监控任务优先级，通过上下文切换让高优先级任务在需要的毫秒级时刻运行。核心内核仅占用约 4 到 9 KB 的 Flash，同时提供严格确定性的任务执行时序，并原生集成进几乎所有主流芯片厂商的 SDK，包括 STMicroelectronics、Espressif、NXP 和 Microchip。

缺点在于：默认情况下所有任务共享同一片平坦、无保护的内存空间，这意味着某个后台日志任务里的一个空指针或栈溢出，就能破坏系统 RAM、让整个单片机崩溃。此外，开箱的 FreeRTOS 严格来说只是一个执行调度器，更高层的网络、文件系统和加密安全栈，都得靠第三方库手动集成。

FreeRTOS 驱动着数以百万计的联网设备，包括 ESP32 智能家居中枢、可穿戴活动追踪器、智能电表和工业传感器变送器。

## VxWorks

当软件故障不再只是不便，而是危及生命的灾难时，工业系统会转向 VxWorks。它最初由 Wind River Systems 于 1987 年发布，是商用任务关键型实时操作系统中的市场领导者。

它采用高性能的单体内核，专为零失败环境设计，附带面向航空航天、国防和医疗设备的成套安全认证材料，提供微秒级延迟和极小时序抖动的硬实时执行能力。它带有交钥匙式的安全合规认证：商用航电领域的 DO-178C、工业自动化的 IEC 61508，以及汽车安全的 ISO 26262。它还具备高级内存保护，防止失控任务破坏核心运行。

代价是成本：昂贵的专有商用许可模式让爱好者和低利润消费电子望而却步，而自定义功能和驱动又必须严格契合 Wind River 封闭、厂商锁定的软件生态。

VxWorks 部署于 NASA 的火星毅力号、波音的飞控计算机、商用 MRI 设备、列车控制系统和高速铁路信号硬件。

## Embedded Linux（嵌入式 Linux）

当单片机的算力见顶、你需要转向应用处理器时，就进入了嵌入式 Linux 的领域。它源出 Linus Torvalds 于 1991 年创建的开源 Linux 内核，但并非 Ubuntu 那样的预打包桌面发行版——而是用 Buildroot 或 Yocto Project 之类的构建工具，针对你的定制硬件电路板编译出一套量身裁剪的极简 Linux 内核与根文件系统。

你会立刻获得庞大的软件生态：Python、C++、Rust 的原生支持，复杂的关系数据库、Web API，以及 QT 或 TouchGFX 这类丰富的图形帧缓冲。针对 USB 外设、触摸屏、Flash 存储和高速网络接口，还存在着数以百万计久经实战的驱动。

主要缺点是：开箱状态下任务调度是软实时、非确定性的，除非给内核打上 PREEMPT_RT 补丁。它还需要 ARM Cortex-A 系列这类资源较重的 32 位或 64 位应用处理器、MB 到 GB 级的 RAM，启动时间以秒计而非毫秒计。

嵌入式 Linux 驱动着智能电视界面、电动车充电站终端、车载信息娱乐触摸屏、网络路由器和工业网关 HMI。

## Zephyr RTOS

随着联网硬件越来越复杂，业界需要一个不那么像简单任务库、而更像现代软件平台的 RTOS。于是 Zephyr 在 2016 年于 Linux 基金会下发布，并获得 Nordic Semiconductor、NXP 和 Meta 等行业巨头的支持。它的目标是为资源受限的 IoT 开发带来统一的结构和标准化。

不同于传统 RTOS 内核，Zephyr 采用受 Linux 启发的设计模式，例如用设备树（device tree）把硬件和引脚从 C 源码中分离描述，再配合模块化的 Kconfig 构建系统。它预置了可直接投产的完整协议栈：低功耗蓝牙、Wi-Fi、Thread 和 Matter。它让你只写一次应用代码，就能跨 ARM Cortex-M、RISC-V 和 ESP32 硬件架构编译，并用物理内存保护单元（MPU）实施硬件级内存保护。

不过，配置 CMake、设备树和 Kconfig 的学习曲线，相比轻量级 RTOS 明显更陡；它的 Flash 占用也更大，基本配置通常就要 20 到 50 KB 以上。

Zephyr 是现代 BLE 资产追踪器、智能健康监测器，以及基于 Nordic nRF52、nRF53 系列芯片的 Matter 智能家居硬件的主流行业标准。

## QNX Neutrino

在极端可靠性与复杂软件必须兼得的高端汽车和安全系统中，QNX 领跑。它最初由 Quantum Software Systems 于 1980 年开发，2010 年被 BlackBerry 收购，是围绕真正的微内核架构构建的商用实时操作系统。

不像单体内核把驱动、文件系统和网络栈都塞进共享的内核内存空间，QNX 的微小内核只保留绝对必要的部分——调度和进程间通信（IPC），其余一切都作为相互隔离的用户态任务运行。这带来了无与伦比的故障隔离：如果某个复杂的 3D 图形驱动或媒体播放器进程崩溃，微内核能在毫秒内重启那个特定进程，而不干扰核心安全功能。它把硬实时性能与最高等级的 ISO 26262 ASIL D 汽车安全合规认证结合在一起。

另一方面，高昂的商用许可费把它的使用限制在企业预算内，而微内核的进程间通信相比单体内核也会引入略高的 CPU 上下文切换开销。

QNX 部署在如今道路上超过 2.3 亿辆汽车的数字座舱、高级驾驶辅助系统和自动化装配机器人之中。

