为什么选择 Zephyr?

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。