您的位置:首页 > 大数据 > 物联网

物联网江湖 第四回 - Zephyr 微风渐起

2016-07-15 16:18 288 查看
文/王嘉宇

本文与之前的两篇侧重点稍有不同,前两篇文章着重介绍的是谷歌与微软的物联网操作系统的战略层面。到Zephyr这个新兴起的物联网操作系统,我想从一个不一样的角度来分析它。因此本文将着重分析一下Linux基金会主导的开源社区的组织构成及其开发者网站的建设思路。

Zephyr简介

Zephyr是一款Linux基金会主导研发的实时操作系统,针对KB级别智能硬件。以开放源码的形式提供给使用者和开发者,遵守Apache2.0协议。

发布时间 - 2016年2月

官网 - https://www.zephyrproject.org/
管理者 - Linux基金会

Zephyr官网指引

1、导航栏

Zephyr的官网类似Windows IoT的开发者官网,以导航栏的形式提供网站指引。导航栏显示的内容包括:
首页
关于
文档
下载
社区
新闻

2、首页内容

Zephyr在首页提到的有三方面的内容:

1)Zephyr的属性内容

安全性 - 强调了在物联网时代操作系统最重要的属性,这个排在第一位。
开源性 - 强调了Zephyr遵守的开源协议。也表达了欢迎从业人员参与该操作系统研发推进。
连接性 - 罗列了Zephyr支持的网络协议,包括了连接层和应用层网络协议。
模块性 - 强调了Zephyr的富特征性,包括在不同的应用环境和平台上,可以通过开启或者关闭相关模块来达到开发者的目的。

2)Zephyr的技术概要

整体模块
nanokernel - 更小的内核,包括更细粒度的调用单元fiber和后台task,具体还包含mutex,timmer,event,pipes,stack和LIFO等组件。
microkernel - 微内核,包含task以及fiber,这里只包含内存管理模块,pipes,event以及mailbox。

在这里,nanokernel可以用于单独开发云星宇资源受限更严格的设备之上的应用。 也可以和microkernel一起,在资源较丰富的设备上开发更复杂的应用。
主要的细分模块
fiber - 更细粒度的调用单元,优先级高于task。fiber本身也有优先级,具体fiber的调度也根据自身优先级来进行。fiber通常用于设备驱动或者性能瓶颈任务。
ISR - ISR可以中断fiber或者task。ISR模块默认打开。ISR可以标示fiber或task是否可运行。
task - task只有fiber不运行的时候才开始运行。task是可抢占的。task根据自身优先级调度运行顺序。高优先级task优先运行。同等优先级采用时间片轮询调度。task主要用于数据处理。

3)Zephyr的社区简介

既然是开源项目,自然就会有所有开源项目具有的普遍特征。

具体的特征包括:
bug跟踪系统,这里采用的是JIRA。
邮件列表,用于主要开发者和关注者沟通。
代码审查工具,这里采用的Gerrit。
联系工具,IRC。
Jenkin持续集成工具。

在社区的详细介绍里,还提到了Zephyr的社区主要分为三类社区:
成员社区,这里的成员主要指各类成员组织,各组织会派出人员参与管理,包括日常管理和技术代表。
开发者社区,这里的开发者主要来自于各成员组织以及别的开发志愿者,但是负责技术管理工作的开发者只能来自于成员组织。
用户社区,这里主要指的是使用Zephyr进行设备开发的从业人员,本身并不参与Zephyr的开发工作。

3、关于页面

在关于页面,Zephyr详细介绍了关于Zephyr开源操作系统从管理到硬件合作方等方方面面的内容,堪称一份简要的关于开源组织如何运作的说明书。我个人感觉有必要在这块用更多的笔墨来描述。

这里的内容主要分为管理层面,生态建设层面,相关会议和视频频道层面,版权层面和出口遵从性层面。

以下为详细介绍:

1)管理层面

这一层面的介绍,更像是这一组织的组织章程的简要版本。具体包括了以下内容:
行政组织组成

行政组织(指理事会)包括行政管理条线和技术管理条线。
行政管理条线负责政策制定,战略选择和给技术管理提供指导。
技术管理条线包括各层次的子系统的负责人。
技术管理条线之上有技术指导委员会,负责行政管理条线与技术管理条线之间的沟通,同时还负责技术管理条线下各子系统之间的沟通。
目前所有管理条线的成员均来自各成员组织。

角色和责任

行政管理包括监督以及向项目提供服务,通常以理事会下工作组的形式来承担此类角色。这些工作组可以在任何时间被创建,并且由相关方面的代表组成。

行政管理人员组织

当前相关的工作组包括以下:
技术指导委员会 - 前文已经描述了该组织的任务,这里不再赘述。
财务 - 主要负责管理财务相关的事物,由一名财务主管牵头负责。
基础设施 - 服务器和系统管理,由一名系统管理员牵头负责。
支援部门 - 公共关系,网站和资料管理,培训管理以及其他需要对外联系的支援任务。
社区管理 - 组织协调社区活动和相关论坛。具体包括组织会议,与项目参与者沟通,外联潜在的成员,维护独有的项目联系方式以及与负责与其他组织联系的的联系人。

技术管理人员组织

主架构 - 负责项目的技术指导以及管理其他人员。
子系统负责人 - 负责bug追踪和该系统内技术管理工作。
项目经理 - 负责子项目任务规划,主持技术会议,解决项目技术上的各种问题。
发布经理 - 负责主导发布进程。

2)生态建设层面

当前该操作系统的生态圈里主要包含的是现有的项目创始成员组织,他们包括
Intel
NXP
Synopsys

现有的生态圈成员都属于半导体行业,甚至包括Synopsys这个芯片仿真的行业巨头。虽然听说过Synopsys有进行一些芯片IP核的设计工作,但是在相关领域并没有听说过有杰出的成就,Synopsys参与物联网很有可能是盯上了物联网芯片这个大市场。

3)相关层面

该层面的主要内容为:
相关开发者大会以及相关发布会的网址链接。
视频网站主页,用于提供某些培训或者开发者大会视频。
相关活动的展示链接,如发布会或者开发者大会上演讲者的胶片材料。

4)版权和商标专利权层面

该层面主要描述了Zephyr相关的版权和商标专利权等法务方面的内容。不再赘述。

5)进出口规章遵守层面

该层面描述了该组织遵守的某些进出口规章,大体属于法务领域的。当然还包括政治领域的,比如这里就描述了根据某些进出口规章制度的约束,该项目及相关产品不得出口到伊朗,约旦,朝鲜以及叙利亚等国。

入门指南及帮助文档

1、Zephyr简介

Zephyr内核是为资源受限的运行环境设计的操作系统内核,这类资源包括简单的传感器设备到无线网关设备。该内核支持的芯片架构包括ARM Cortex-M, Intel x86, 和ARC

Zephyr有以下五个显著的特征:
单地址空间操作系统 - 可以将定制化的内核与用户专用代码编译打包为一个整体镜像,然后将镜像加载到目标芯片上。应用代码和内核代码共用同一套内存地址空间。
高可定制性 - 针对不同的目标硬件,可以设置不同的匹配模块。
编译时资源定义 - 所有系统运行所需的资源都在编译时确定,以此来降低可执行文件的大小和提高性能。
最小化错误检测 - 最小化运行时错误检测机制,以此来降低可执行文件的大小和提高性能。与此同时,附加了应用开发时的debug模式的错误检测框架。
服务扩展组件 - 为开发者提供一系列熟悉的工具或服务,具体包括

多线程服务 - 包括基于优先级调度不可中断的fiber组件;和基于优先级可中断,提供轮询调度的task组件。
中断服务注册 - 包括编译时和运行时两种状态下中断处理句柄的注册。
线程间同步机制 - 包括二进制信号量,计数器信号量和锁信号量。
线程间数据传输机制 - 包括基本消息队列,增强消息队列和字节流。
内存管理机制 - 包括内存动态申请,内存动态释放,释放的内存可是固定大小的也可是变量决定大小。
能耗管理机制 - 包括无时钟空闲状态和高级空闲状态架构。

2、Zephyr入门指南

在该入门指南的页面内,主要包括两个层面的内容,设置开发环境和编译运行应用。

1)设置开发环境

该小节主要描述了此系统支持的宿主操作系统环境,包括
Linux
Mac OS
Windows8.1

接下来提供了三个宿主操作系统设置开发环境的帮助链接,以及如何获取代码。

2)编译运行应用示例

该小节又由三个部分组成:
编译 - 主要分步描述了如何编译Zephyr以及运行其自带的Hello World示例。其宿主操作系统以Linux平台为例。该节我们需要注意的有两点,在Zephyr自带的Makefile里提供了对不同硬件平台的支持,可以做到傻瓜式编译。同时,通过make help又可以获得支持平台列表。
交叉编译 - 主要描述了如何在Zephyr支持硬件列表之外的平台上,利用第三方交叉编译工具来编译目标文件。这里以GCC ARM Embedded系列交叉编译器为例。
运行 - 主要描述了如何在qemu模拟器上进行模拟运行。

3、内核指南

这部分描述的内容主要包括内核各部分的主要特征以及使用指南。具体内容包括通用内核,nanokernel和microkernel。

4、设备驱动和设备模型

这部分主要描述了如何将设备驱动与Zephyr的设备模型连接起来,使用Zephyr提供的统一API实现设备驱动的初始化。一定程度上可以简化设备驱动的开发。

5、子系统

这里的子系统包括以下内容:
网络系统
蓝牙连接系统
传感器驱动系统
能耗管理系统

6、参与贡献代码

这部分的目标读者是有兴趣参与Zephyr开发的普通内核开发者。

7、移植指南

这部分内容很单一,主要是讲解如何将Zephyr移植到别的架构,平台和硬件开发板上。

8、系统编译用户指南

在Zephyr操作系统上开发物联网应用不同于Linux平台开发应用,虽然这里也用到了Linux内核编译时使用的Kconfig编译系统,但是在Zephyr平台上,是将客户的应用代码和Zephyr内核编译成同一个单独的镜像,然后加载到目标硬件上开始应用。

这里主要讲解的部分包括:
The Kconfig File Structure
The Makefiles
Developing an Application and the Build System

9、应用开发指南

这里包括以下几部分内容,涉及到深入了解Zephyr的方方面面。
Application Development Workflow
Application Development Directory Structure
Kernel Configuration
Microkernel Object Configuration
Application Code Development
Build an Application
Run an Application
Common Procedures

10、API 文档

这里包括六个方面的帮助手册
nanokernel API
microkernel API
Device Driver Interface
Input/Output Driver API
Event Logger API
Power Management API

11、环境配置变量

编译配置选项帮助手册。

12、支持硬件

罗列了Zephyr目前支持的不同硬件架构以及具体的单板。

下载页面

关于这一部分非常简单,仅仅是根据不同的发布版本提供了下载链接。

总结

关于Zephyr的官方网站的指引阅读体验,我总结了以下几点
完整的整理了关于该开源项目的所有的资料,包括从管理层面到技术层面。
着重提到了该项目的重要技术概念,包括分类的内核和高优先级且不可中断的fiber任务,与其余的同类项目区别开来,增强了自身的亮点。
完整的技术文档,包括所有的入门指南,全部娓娓道来,开发者只要循着介绍一步一步进行下去就可以很快的实现自己第一个项目开发。
优秀的排版,让人赏心悦目,不会把所有的内容全部堆砌在一起。

值得学习的点

1、完整的技术文档归类,清晰的下载链接。

2、强调自身的技术亮点,在第一时间吸引目标开发者。

3、与微软的网站很类似的水平导航栏可以让读者较容易找到自己感兴趣的页面。

4、完整的编译栈和相关的模拟器软件。

结语

通过浏览Zephyr的代码结构,不难发现该项目借鉴了很多Contiki的代码。关于网络部分和OS的某些核心代码都是拿来主义。除此之外,据说还包括Intel捐赠的WindRiver源代码。时间有限,无法从源码级别分析Zephyr操作系统,希望将来有时间能仔细研究下Zephyr的源码,特别是关于fiber和task的实现,当然还包括中断服务的实现。

我刚开始写这篇文章的时候,Zephyr刚更新了1.2版本的帮助文档。等我过了大概一个半月来补充完善本文的时候,Zephyr已经演进到了1.4版本。我们自有的LiteOS相比,演进速度之快,发展势头之猛,皆令人称羡。看来我们在低内存硬件方面,遇到了真正的对手。作为一款Linux基金会主导开发的物联网实时操作系统,它的潜力值得我们提高警惕。

我最开始写本文的目的,是分析开源项目的具体组织方式。Linux作为开源软件界的鼻祖,值得我们学习的地方太多。不管是管理层面还是技术层面,都有很多值得我们借鉴的丰富的内容。这其中就包括开源社区建设,开源组织管理,开发者网站建设等等。

下回预告

Zephyr借鉴了很多Contiki的源代码,那么下回我们就分析一下这个来自瑞典计算机科学研究所大神的杰作。

(更多华为资讯请关注华为开发者社区,华为自己的对外开放门户:http://developer.huawei.com/cn/ict/ ,不要问我叫啥,别人都叫我雷锋)




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 ICT 物联网 Zephyr