为何选择 Zephyr?

ARM 89浏览
Zephyr 项目于 2 月宣布时,Linux 社区的许多成员似乎都感到不解。尽管由 Linux 基金会托管,但 Zephyr 是一款完全独立的操作系统,并未采用 Linux 代码。与多个其他开源操作系统项目(包括面向许多 ARM SoC 的 Linux)一样,该操作系统也面向小型硬件设备 —— 从 Arduino 到 ARM 系统芯片 (SoC)。在于圣迭戈举办的 016 年嵌入式 Linux 大会上,Zephyr 团队现场说明了这一新项目为何恰逢其时,并希望它可引起开发人员的浓厚兴趣。

“事物”操作系统
任职于英特尔的 Anas Nashif 在其演讲中简述了Zephyr,包括英特尔支持该操作系统的背景及其功能。该项目的基本目标是为“子 Linux 设备 (sub-Linux device)”提供一种开源的实时操作系统 (RTOS)。除此之外,英特尔研究了市场上目前的 RTOS 产品,发现它们存在多方面不足。首先,其中多款产品仅支持一种架构,这影响了它们的吸引力。
其次,多款产品为用户自主开发 (roll your own) 的项目,用于研究或由单人维护。这似乎会产生严重的安全缺陷。此外,一些较小的 RTOS 项目使用特殊的软件许可证,这也会限制开源社区对它的采用。最后,许多现有项目在功能方面受到过多限制,无法用作物联网 (IoT) 设备的通用操作系统,而英特尔认为 Zephyr 可担此重任。
相比之下,Zephyr 开源 RTOS 产品具有如下优势:支持多个架构、具有广泛的贡献者群以及不只提供一种“调度程序”,而且还提供出色的网络支持和真正的安全框架。英特尔有幸获得了 Wind River 微控制器 RTOS 的权限,认为它有望成为广泛适用的操作系统,于是着手改进代码并做好发布准备。终于,他们推出了现在众所周知的 Zephyr 开源项目,该项目还用作 Wind River“Rocket”RTOS 产品的核心。目前,英特尔主导相关的开发工作。
Nashif 表示,Zephyr 基于已使用十多年、久经实际应用考验的 Wind River 代码库而构建。扩展原始代码包括几个关键步骤。首先,通过重构提升模块化水平。在编译时,开发人员可按需采用或删除任何子系统以适应硬件。硬件包括“最底端子 Linux 设备”、“成本最低的芯片”等。他演示的幻灯片列出了运行 Zephyr 的初始硬件产品,包括低端的 Arduino 101 和英特尔 Quark D2000,以及高端的第二代英特尔 Galileo。但他补充到,Galileo 只是一种开发平台,完全能够运行 Linux,因此他认为没人会将它用于 Zephyr 的实际部署。

其次,Zephyr 团队加入了网络功能。他们从头编写了低功耗蓝牙 (BLE) 实施方案,并移植了开源 Contiki RTOS 中的 IP 堆栈。支持 IPv6,包括低功耗 6LoWPAN。该项目仍在考虑其他网络堆栈,近场通信 (NFC) 可能被采纳;ZigBee 根据需要,WiFi 也可能被采用。
其代码库的第三个新增特性是基于 TinyCrypt 的加密库。在单独举行的会议中,安全开发人员 Constanza Heath 介绍了 TinyCrypt 的一套随机数生成 (RNG)、密码和密钥交换基原以及 Zephyr 的通用安全方法。一个 Zephyr 映像只运行编译时静态连接的单个应用。单个地址空间和无支持的可加载内核模块大幅缩减了攻击面。她概述道,当单个静态连接的进程在运行时,恶意代码只可能在编译时运行在 Zephyr 硬件上。因此,该项目省略了一些其他安全特性,而较大的操作系统会使用这些特性防范安全漏洞,不过她表示其团队仍在研究加入一些保护功能,如地址空间随机化。对于多数安全特性,亟需解决的问题是平衡安全性与容量。
特性
在容量方面,Zephyr 可在 RAM 为 8KB 时流畅运行,甚至可在 RAM 为最小的 2KB 时运行,不过 Nashif 表示在 2KB 时它仅支持“Hello World”演示,无法提供其他功能。Zephyr 内核可采用两种模式的其中之一进行配置。最小的是“超微内核”模式,该模式可提供基础的多线程执行环境、线程间同步服务(包括信号量和互斥量)、消息队列和中断服务。他表示,超微内核模式有望用于最小和最廉价的设备,如环境传感器,这些设备除收集和发送数据外只需实施少量的处理工作。
微核模式相比超微核模式较为先进,可提供超微核模式特性的超集,包括更复杂的消息队列、更多的内存分配服务、抢占式任务和轮询时间切片。该模式有望用于稍大的物联网节点之上,如可能需要先对从传感器收集的数据进行处理和格式化、然后将其转发至远程服务器的传感器中枢。Nashif 指出,超微核和微核模式都提供网络功能,不过为全 IP 网络堆栈配置超微核 build 可能致使 Zephyr 难以用于 10KB 以下 RAM 的设备。
此外,Nashif 表示 Zephyr 还可利用一些 Linux 工具。使用 Linux 内核的 kconfig 可进行配置,使用 kbuild 可完成 Zephyr build。但是他表示,相似性止于工具,Zephyr 映像针对单个应用进行配置和构建。“我们只是借鉴 Linux 的优势,但不是完全照搬 Linux。”该项目提供支持五个编译器的软件开发套件 (SDK),该套件包含用于传输图像至准备和调试的工具。除在 Linux、Windows 和 Mac OS X 上运行外,该 SDK 还可在 Docker 容器中运行。
Nashif 表示,英特尔将 Zephyr 视作一项战略投资。该公司发现 RTOS 市场存在巨大鸿沟,尤其在物联网设备方面,因此想抓住机遇构建相应项目来填补这一鸿沟。英特尔希望获得社区支持,并尽可能与其他开源项目展开合作。Nashif 补充道,他明白物联网市场竞争激烈,两款新物联网操作系统自 Zephyr 发布后又相继问世,而且这种竟相发布新品的趋势并不会减缓。
任何想要称霸物联网市场的厂商都需要“过关斩将”,打败诸多竞争对手,无论是在专有还是开源领域。Zephyr 尚处于发展初期,不过其代码库在 Wind River 中已使用了较长时间。Zephyr 的发展前景令人期待。
https://www.zephyrproject.org/
Zephyr的学习笔记,请在Github上搜索:Zephyr-Inside。