Skip to main content
AnnouncementsBlogNews

Zephyr 3.4 新版本公告

By June 16, 2023No Comments

今天,我很荣幸能代表Zephyr社区宣布,Zephyr 3.4.0已经正式发布了

在深入了解Zephyr 3.4的一些重要改变和新增内容之前,让我们先看看这个版本的一些关键数字,我认为这将有助于您了解我们所做的大量工作:

Zephyr 3.4 by the numbers: - 491 contributors, 91 maintainers - ~2 commits/hour - 220K+ lines of code added - 30+ new boards

491位贡献者,91位维护者 – 每小时约2次提交 – 220K+行新增代码 – 30+新开发板

这个新版本证明了Zephyr在各种类型应用中的广泛使用。

例如,越来越多的公司正在使用Zephyr构建嵌入式控制器 – 这些微控制器驱动的应用支持计算机处理底层系统任务 – 而新版本3.4中的一些改进正好可以帮助简化这一领域的开发:比如对NVMe硬盘、SMBus外设和实时时钟添加新API和驱动程序的支持

Zephyr 3.4还引入了其内置测试框架(Twister)的几项改进,使得可以编写比以前版本更全面的测试用例。现在,开发人员可以使用流行的第三方测试框架,如pyTest,GoogleTest和RobotFramework,编写在真实或仿真硬件上运行的端到端测试用例,并可以连接到例如物联网服务器进行测试。

如果您想查看这个版本的亮点展示,我录制了一个视频,其介绍了一些很酷的例子和演示。

如果你更愿意阅读主要的改变,那么,请继续阅读!\ 只需点击章节前的图标,就可以观看覆盖它的视频部分。

此外,请点击查看完整的release notes在这里,因为这篇文章显然不能详细解释每个细节变更 😉

新增外设支持

New peripherals supported: Auxiliary displays, NVMe disks & controllers, retained memory, SMBus, Real-time clocks.

新增外设支持:辅助显示,NVMe磁盘和控制器,保留内存区(Retained memory),SMBus,实时时钟。

辅助显示(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测试框架改进

Twister,是Zephyr自家的测试框架,在内部广泛被使用(dogfooding)以确保Zephyr本身被充分测试。实际上,对于提交到Zephyr仓库的每个pull request(假设它有代码更改),我们的CI任务会触发Twister并运行数千个单元测试。

Zephyr 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的最新工作草案的实验性支持。

新增开发板和驱动

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

欢迎我们的Zephyr 3.4版本发布工程师

一个开源项目如Zephyr要按时交付,需要一整个团队的努力,我们的版本发布工程师在这个过程中起到了至关重要的作用。我询问了我们的两位3.4版本的发布工程师,来自Intel的Anas Nashif和来自Meta的Joshua Lilly,他们认为这个新版本有哪些亮点。

我最喜欢3.4的地方是我们对Zephyr进行了大量的错误修复和稳定性改进,比如我们对pthread进行了大量的工作,使其更加健壮,依赖于Zephyr的原语。

Joshua LillyMeta

在两个Zephyr版本和4个月的开发时间之间,我们为生态系统带来了大量的变化、改进、新功能和创新,这是惊人的,也表明了社区是如何朝着一个目标前进的。随着越来越多的贡献者和成员加入到Zephyr项目中来,Zephyr 3.4证明了Zephyr项目的伟大之处。这个版本只是一个里程碑,我们才刚刚开始!

Anas NashifIntel

最后,当然,对我们的维护者和贡献者在这个版本上的辛勤工作表示由衷的感谢和赞赏。

你已经可以初步了解即将发布的Zephyr 3.5的情况这里,因此我非常鼓励大家今天就参与进来,帮助塑造Zephyr的未来版本!

Translated from English by Frank Li、jam、zxt、thomas.

If you enjoyed this article, don’t forget to subscribe to the Zephyr newsletter to receive insightful quarterly updates about all things Zephyr! You can also follow us on Twitter and LinkedIn.

Benjamin Cabé

Benjamin is a technology enthusiast with a passion for empowering developers to build innovative solutions. He currently serves as the lead developer advocate for the Zephyr Project. You can find him online as @kartben on virtually every social platform, and you can check out his blog at blog.benjamin-cabe.com.