小型实时操作系统-Zephyr
2020-09-23 21:43:19 阿炯

Zephyr是一个小型的实时操作系统,用于资源受限的嵌入式互联设备,支持多种体系并在Apache许可证 2.0下发行,采用C和汇编语言写成。它有一个BSD许可证的仿品出现在来自Intel的Arduino 101软件资源包中。



Zephyr最初是风河系统公司在2015年11月推出的为物联网(IoT)设备开发的“Rocket内核”,更早时称为“Microkernel Profile for VxWorks”,代码移植于2001年并购Eonic Systems得来的Virtuoso DSP RTOS。在2016年2月,它成为Linux基金会的项目而改为现名。该项目是一个可扩展的实时操作系统(RTOS),支持多种硬件架构,针对资源受限的设备进行了优化,并在构建时考虑了安全性。Zephyr OS 基于专为资源受限系统设计的小型内核:从简单的嵌入式环境传感器和 LED 可穿戴设备到复杂的智能手表和物联网无线网关。


Zephyr内核提供了如下一些特征:内存保护,内核服务,高可配置性,编译时确定资源

Zephyr内核设计用于资源受限的系统,预期目标是用于从简单的嵌入式环境传感器和LED可穿戴设备,到复杂的智能手表和IoT无线网关。它的构造系统支持Zephyr SDK之外的第三方工具链。Zephyr计划的成员和支持者包括:Intel、Linaro、NXP半导体、Nordic半导体,和Synopsys、 runtime.io、DeviceTone、Oticon等。

内存保护

实现可配置的特定于架构的栈溢出保护,内核对象及设备驱动程序许可权追踪,和线程隔离,采用了在x86、ARC和ARM架构上的线程级别内存保护、用户空间和内存域。对于没有MMU/MPU的平台和内存受限的设备,支持把特定应用的代码和一个定制内核组合起来创建一个单体映像,它被装载并执行于系统硬件之上。应用代码和内核代码二者都执行在一个共享的单地址空间中。

高可配置性

允许应用只合并入它需要的功能,并指定它们的数量和大小。

编译时确定资源

要求所有系统资源都在编译时确定,这缩减代码大小并增进性能。

内核服务

内核为应用开发提供了一些熟悉的服务,包括:
多线程服务,兼具基于优先级的、非抢先式的协同线程和基于优先级的、抢先式线程,带有可选的轮流式时间片。包括POSIX pthread兼容API支持。
中断服务,兼具编译时和运行时的中断处理器注册。
线程间同步服务,具有二值信号量、计数信号量、互斥信号量。
线程间数据传递服务,具有基本消息队列、增强消息队列和字节流。
内存分配服务,具有固定大小或可变大小内存块的动态分配和释放。
电能管理服务,具有比如无时标空闲和高级的空闲下部构造。


关于风河系统公司

风河系统公司(英语:Wind River Systems Inc.),常被称作风河公司,是一间以发展嵌入式系统为核心业务的美国软件公司,同时提供对应的嵌入式系统开发工具、中间件和其它软件。1981年由Jerry Fiddler 与 David Wilne创立于美国加州柏克莱。2009年6月4日被英特尔以8.84亿美元并购,成为英特尔旗下的子公司并保持自身独立性。

公司总部位于美国加利福尼亚的阿拉米达。最著名的产品是VxWorks嵌入式操作系统,另一个操作系统Wind River Linux也享有盛名。

风河系统公司专注于嵌入式系统的中间件:设备的操作系统和软件。他们的产品被用于手机、汽车、路由器、数字相机、投影仪、电视机顶盒、交通信号灯、火星探测器(勇气号、机遇号、好奇号)、火箭、卫星、飞机等。其核心发展战略是设备软件的优化。

公司的旗舰产品是VxWorks嵌入式实时操作系统(RTOS),Wind River Linux嵌入式操作系统,基于Eclipse的IDE -- Wind River Workbench。



最新版本:3.4
Zephyr 3.4 现已于2023年6月下旬发布。发和公告称,此版本证明了 Zephyr 在各种类型应用中的广泛使用。例如越来越多的公司正在使用它来构建嵌入式控制器 – 这些微控制器驱动的应用支持计算机处理底层系统任务 – 而新的3.4版本中的一些改进正好可以帮助简化这一领域的开发:比如对 NVMe 硬盘、SMBus 外设和实时时钟添加新 API 和驱动程序的支持。还引入了其内置测试框架(Twister)的几项改进,使得可以编写比以前版本更全面的测试用例。现在,开发人员可以使用流行的第三方测试框架,如 pyTest,GoogleTest 和 RobotFramework,编写在真实或仿真硬件上运行的端到端测试用例,并可以连接到例如物联网服务器进行测试。

新增外设支持

辅助显示 (Auxiliary Text Display)
辅助显示是基于文本的显示器,它们用简单的界面显示文本、数字或字母数字。你通常会想通过发送字符,而不是像素来与这些显示器进行交互。新增 Auxiliary Text Display API 可以让你达到目的。目前已有针对常见的辅助显示(来自 Hitachi,Noritake,Jinghua 等)的驱动程序。

NVMe 磁盘
NVMe (Non-Volatile Memory Express 非易失性存储器快速访问接口) 是一种专为 NAND 闪存(比如:固态硬盘 SSD,M.2 卡等)设计的高性能存储协议。从 3.4 版开始支持 NVMe 控制器和磁盘,并且与 Devicetree 完全集成,以便进行配置和定制。

实时时钟
实时时钟是低功耗的,通常由电池供电的设备,用于实时记录时间,在主系统被关闭时 RTC 也能继续工作。Zephyr 3.4 为 RTCs 增加了支持 ,提供了一种与硬件无关的一致方式来与它们进行交互。除了基本的时钟获取或设置交互外,API 还支持设置闹钟或校准时钟,如果这些功能由底层硬件支持的话。针对如 NXP PCF8523 和 Motorola MC146818 等热门 RTC 芯片的驱动程序已经可用。

保留内存区 (Retained memory)
新增的保留内存(Retained memory)API 使应用程序能够对某些保留的内存区域(例如,未被初始化的 RAM 部分)、或在设备启动时保留信息的设备进行数据的读取和写入。当人们不想使用非易失性存储器 (non-volatile storage),例如,在不同的应用程序之间、或在单个应用程序的内部分享信息,或在设备重启后不丢失状态信息时,这些 API 会是一个很好的选择。

SMBus
SMBus(System Management Bus 系统管理总线)是从 I²C 派生的两线制总线 (two-wire bus),经常用于主板与低带宽设备的通信,例如获取来自温度传感器、电池燃料表等的信息。从 Zephyr 3.4 开始,新的 SMBus 子系统允许开发人员在他们的应用程序中操控 SMBus 控制器和设备。

输入子系统
该子系统让输入设备可以通过 API 将输入事件送到应用程序。它提供了处理输入事件(如键/按钮被按下,触摸屏被按下等)的更高级别的抽象。这使得 GUI 和硬件底层输入解耦,让 GUI 开发更为容易。这个新的子系统也为开发人员提供了一个很好的机会,来研究如何利用 Zephyr 内置的状态机框架来处理更复杂的交互场景。

保留内存区子系统
为了补充对保留内存区的支持,新的保留内存区子系统已经与设备树集成,可以轻松配置和自定义如何保留数据,包括创建多个分区,通过校验和验证数据完整性,或处理设备重启的特殊情况,比如使其运行不同的应用程序。

Twister 测试框架改进
它是 Zephyr 自家的测试框架,在内部广泛被使用(dogfooding)以确保 Zephyr 本身被充分测试。实际上,对于提交到 Zephyr 仓库的每个 pull request(假设它有代码更改),我们的 CI 任务会触发 Twister 并运行数千个单元测试。3.4版本为 Twister 添加了许多改进,使其更适合复杂的、端到端的、功能测试。开发者现在可以使用流行的第三方测试框架如 pyTest,GoogleTest 和 RobotFramework 来编写在真实或模拟的硬件上运行的测试,并且可以连接到网络例如 IoT 服务器。

Zephyr SDK 更新
建议更新到 Zephyr SDK (0.16.1) 的最新版本。Zephyr SDK 的主要优点之一是它能让您一站式获取到所有的工具链和主机工具,这对您的 Zephyr 日常开发来说是非常方便的。SDK 的尺寸多年来的一直在增长,由于现在使用 tar.xz(Linux/macOS)和 7zip(Windows)进行打包,而不是以前的.tar.gz 和.zip,所以这个最新版本的大小减小了一半(因此下载速度变快为原来的 2 倍)。

片段(Snippets)
新添加的” 片段 “帮助简化所有常见设置(例如,配置文件、设备树覆盖 Devicetree overlays)在各种项目中可能需要重复使用的内容。一个典型的使用场景是将所有您喜欢的调试选项(例如,启用 shell、自定义日志级别等)打包成一个片段,以便您可以轻松地检测需要故障排除的应用程序,也包括更改硬件定义级别(例如,通过 USB 接口启用 Zephyr shell)。

以下是其它值得注意的 API 介绍

内存屏障 (Memory Barriers)
一个用于数据内存屏障的新 API 已经推出。数据屏障本质上是一种方式,友好地告诉你的处理器:” 嘿,我知道你喜欢为了效率重排任务,但是这些特定的内存操作需要按照我给出的确切顺序进行!”。这在对称多处理器(SMP)场景中特别有用,但在多线程应用或异步访问硬件时也可能需要。

新的屏障 API 为所有的处理器架构提供了一种更一致的方式来实现同步栅栏 (synchronization fences)。
蓝牙 5.4 新增特性(但不仅仅是蓝牙 5.4!)

蓝牙核心规范版本 5.4 于今年 2 月 7 日发布,这个新的 Zephyr 版本已经支持了这个标准版本的所有新增功能,即:
加密广播数据(Encrypted Advertising Data,EAD),它允许在蓝牙 LE 广播数据包中安全地广播数据;
带响应的周期性广播(Periodic Advertising with Responses,PAwR),一种允许蓝牙低能耗设备在大规模一对多拓扑中进行高能效、双向通信的功能。与 EAD 结合,这对于如电子货架标签等应用可能非常有用;

蓝牙方面的其他值得注意的变化包括对以下内容的支持:
公共音频配置文件(Common Audio Profile,CAP)单播;
电话和媒体音频配置文件(Telephony and Media Audio Profile,TMAP)— 蓝牙在所有与电话有关的事情中特别受欢迎,因此很高兴看到初步的蓝牙 LE 电话和媒体音频配置文件(TMAP)支持已经添加;
网状网络 (Mesh) — 新增了对 Mesh 1.1、网状二进制大对象传输模式 (Mesh Binary Large Object Transfer Mode) 1.0 和网状设备固件更新模型 (Mesh Device Firmware Update Model) 1.0 的最新工作草案的实验性支持。

新增开发板和驱动
相较于上一版,新增支持了 30 多款开发板,包括 Arduino GIGA R1 WiFi,Seeed Studio 的 Wio Terminal 和 XIAO BLE,ESP32-S3 开发套件等等。
添加了几十种传感器的驱动(环境传感器,惯性测量单元,电流传感器等),现在 Zephyr 不仅原生支持超过 150 种传感器,而且通常与 Zephyr 堆栈紧密集成,例如利用其电源管理功能。

详情可查看更新公告


官方主页:http://www.zephyrproject.org