[搬运] 嵌入式操作系统
本文整理的所有内容都来自 YouTube 频道“Techs Explained”发布的视频《Every Embedded Operating System Explained in 9 Minutes》。 Link: Every Embedded Operating System Explained in 9 Minutes
嵌入式操作系统
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 亿辆汽车的数字座舱、高级驾驶辅助系统和自动化装配机器人之中。