Zephyr 框架结构简介

Creative Commons
本作品采用知识共享署名

本节文从不同的侧面介绍Zephyr的架构,通过本文可以了解Zephyr不同的层次功能,对Zephyr框架有总统性的认识。

本文图片均来自Zephyr官方文档,参考中提供链接。

生态系统

Zephyr的生态系统为Zephyr的丰富功能提供了强大的支持。下图展示了整个Zephyr生态系统结构

ecosystem

其中Zephyr OS为Zephyr提供的核心代码包含了:

  • Kernel/HAL
    • 内核调度
    • 低级的体系结构和板级支援
    • 各种RTOS内核对象
    • 电源管理框架
    • 低级的硬件接口抽象
  • OS服务及底层接口
    • 设备管理及底层驱动API
    • 文件系统,Logging系统,Debugging系统及IPC
    • 加密服务
    • 平台相关的特殊驱动
    • 网络协议栈
  • 应用服务
    • 高层级的应用API
    • 标准化的数据模型
    • 高层级网络协议接口

对于Zephyr应用开发者,需要熟知应用服务和OS服务,了解底层接口及Kernel/HAL特性。

Zephy也提供构建系统及开发环境和Zephyr OS一起构成了Zephyr Project,Zephyr Project包含了:

  • Zephyr的SDK,构建工具,CI及开发环境
  • Bootloader:MCUboot
  • 附加的中间件

Zephyr除了核心代码之外还引入了其它优秀的开源项目做为其功能组成部分,另外还有不同的项目也将Zephyr作为其组成部分,这些内容在一起构成了完整的Zephyr生态。Zephyr生态有如下内容:

  • 第三方模块或库:例如lvgl,fatfs,mcumgr,openthread,openamp,opencan等等。
  • 第三方支持Zephyr的项目:例如Jerryscript ,Micropython , Iotivity , SwiftIO等。
  • SOC供应商Hal,Zephyr将不同芯片的Hal作为外部模块引入到Zephyr中,通过Zephyr驱动的整合让应用可以通过统一的驱动接口控制不同芯片的片上设备。例如:nxp,st,ti,nordic,silabs等等。

系统架构

Zephyr OS的系统架构图如下,更详细的显示Zephyr OS的各层框架结构

Kernel涵盖以下内容:

  • 提供Kernel service,例如thread,同步,数据传递,中断管理,时间管理,内存管理等
  • 进行任务调度
  • 电源管理
  • 平台相关的特殊驱动,例如Radios,传感器,加密硬件,Flash等

OS服务涵盖以下内容:

  • 设备驱动实现,提供统一的底层驱动接口
  • 设备管理
  • 网络L2实现及接口抽象
  • 网络层和传输层协议栈(TCP/IP),socket接口

应用服务涵盖以下内容:

  • 网络应用协议及高层级接口,例如HTTP,coap,mqtt,tls,dtls等
  • 提供标准化的数据模型,目前尚未在Zephyr的目录树中找到该部分内容
  • 提供智能物件对象,例如基于lwm2m的IPSO

硬件支持架构

Zephyr按照下面架构对不同硬件进行支持

hwas

Zephyr的硬件层次结构被抽象出6层:

  • 架构(Architecutre):指令架构体系,例如ARM,RISC-V,x86等
  • CPU内核(CPU core):架构中特定的CPU,例如ARM中有Cortex-M0,M3,M4,M7等
  • 芯片族(Soc family):具有相似特性的SoC,例如Cortex-M7中有STMicro STM32,NXP i.MX
  • 芯片系列(SoC series):一小部分紧密关联的SoC,例如i.MX中有i.MX RT 系列,i.MX 8系列等
  • 芯片级(SoC):电路板上的SoC,例如i.MX RT系列中有RT1050,RT1060等芯片
  • 板级(Board):PCB上特定的SoC和一些外设相连构成有特定功能的电路板。例如Zephyr支援的mimxrt1050_evk,mm_swiftio开发板使用了rt1052芯片。

参考

https://events19.linuxfoundation.org/wp-content/uploads/2018/07/OSLS-2019_-Zephyr-Project-.pdf
https://docs.zephyrproject.org/latest/security/security-overview.html
https://docs.zephyrproject.org/latest/guides/porting/board_porting.html