zoukankan      html  css  js  c++  java
  • Zephyr OS 基础篇:系统简介【转】

    转自:https://blog.csdn.net/tidyjiang/article/details/52058889

    Zephyr OS 相关学习学习资料,请关注我的github:
    https://github.com/tidyjiang8/

    Zephyr OS 简介

      Zephyr 是一个用于物联网的开源操作系统,受到 Linux 基金会支持(参考 这里),在今年二月份刚发布 1.0 版本,目前开发到 1.4 版本。Zephyr 的目标非常远大,即一统物联网操作系统。
      
      Zephyr 目前还处于初期阶段,项目开发非常活跃,代码托管在 Linux 基金会自己搭建的 Girret 服务器上,而不是在 Github 上。也正是由于它还是在初期阶段,所以我对它充满了期望。这是机遇呀!!
      
      左手一个Contiki,右手一个 Zephyr,一直在想 Zephyr 相对于 Contiki 在哪些方面有优势,但这不是现在的我能说清楚的,因为对两个操作系统都不熟。不过发现一个有意思的地方:Zephyr 的 ip 协议栈是对 Contiki 协议栈的移植。除了 ip 协议栈外,Zephyr中还包括了低功耗 Bluetooth 协议栈。

    Zephyr OS 内核架构

      Zephyr 的中文翻译是“和风;西风;轻薄织物”,由此可以看出 zephyr 是一个轻量级的操作系统。事实上,它提供了两种内核:微内核 microkernel 和超微内核 nanokernel,用户可以在编译时通过配置文件配置使用哪种内核:同时使用微内核和超微内核,或者只使用超微内核。
      
      超微内核具有内核的一系列基础特征,是一个高性能、多线程的执行环境。超微内核适用于内存很少(最少为 2KB)的系统或者简单的多线程系统(比如只有一些列中断处理和单后台 task)。这样的系统主要包括:嵌入式传感器 hub、传感器、简单 LED 可穿戴设备以及商店库存的标签。

      微内核比超微内核的功能更加丰富。超微内核适用于这样的系统:内存更多(50 ~ 900 KB)、多通信设备(比如WIFI、低功耗蓝牙)、多 task。这样的系统主要包括:可穿戴设备、智能手表、物联网无线网关。

    Zephyr 的特征

      Zephyr 内核是一个微型内核,被设计用于资源受限的系统:从简单的嵌入式传感器、可穿戴 LED,到复杂的智能手表、物联网无线网关。

      Zephyr 支持多架构,包括:ARM Cortex-M、Intel x86 和 ARC。在 这里 可以查看 Zephyr 支持的所有平台。

      与其它微型内核相比,Zephyr 内核有很多独特的优秀特性:

    1. 单地址空间操作系统。将应用程序相关的代码与内核结合在一起,创建一个在硬件上加载、运行的单一镜像。应用程序代码和内核代码运行在同一个共享地址空间。
    2. 高度可配置。允许应用程序只包含它们需要的功能。
    3. 编译时定义资源。所有系统资源都在编译时定义,以减小代码量、增强代码性能。
    4. 最小错误检查。提供最小化的运行时错误检查,以减小代码量、增强代码性能。提供一个可选的错误检查基础,以协助应用程序的开发和调试。
    5. 广泛的服务。提供了许多耳熟能详的服务:
      • 多线程服务:为基于优先级的、非抢占式的 fiber 和基于优先级的、抢占式的 task 提供可选的时间片。
      • 中断服务:在编译时、运行时均可注册中断处理函数。
      • 线程间同步服务:包括二元信号量、计数信号量和互斥信号量。
      • 线程间数据传递服务:包括基本消息队列、增强型消息队列和字节流。
      • 内存分配服务:动态地分配固定尺寸、可变尺寸的内存块。
      • 电源管理服务:包括无滴答 CPU 空转和高级 CPU 空转。

    Zephyr OS 源码结构

      Zephyr 源码树的顶层目录如下所述,每个顶层目录都包括一级或多级子目录。

    arch
      架构相关的超微内核代码和平台代码。Zephyr 支持的每个架构都有一个子目录,且这些子目录还包括下面子目录:

    • 架构相关的超微内核源文件。
    • 架构相关的超微内核的私有 API 的头文件。
    • 平台相关的代码。

    boards
      board 相关的代码和配置文件。
    doc
      Zephyr 文档相关的材料和工具。
    drivers
      设备驱动代码。
    include
      所有(不包括 lib 目录)公有 API 的头文件。
    kernel
      微内核代码,以及架构无关的超微内核代码。
    lib
      库代码,包括最小的 C 库。
    misc
      杂项代码。
    net
      网络相关的代码,包括蓝牙协议栈和网络协议栈。
    samples
      微内核、超微内核、蓝牙协议栈和网络协议栈的应用程序举例。
    tests
      内核各个特性的测试代码。
    scripts
      用于编译、测试 Zephyr 应用程序的程序和文件。

    学习资料

  • 相关阅读:
    【转】SqlServer Text类型字段超过8000字处理
    uniapp项目运行时一直发http://localhost:8080/sockjs-node/info?t=1462183700002请求
    【转】chrome 浏览器调用 ocx 插件
    【转】javascript检测浏览器插件
    【转】web错误代码ERR_BLOCKED_BY_RESPONSE
    我是如何将Sublime Text 4 设置成中文版
    【转】用好 Vue 中 v-for 循环的 7 种方法
    【转】JavaScript console.log %c %o %s %d %f
    [JavaScript]UMD模块
    leetcode-课程表I和课程表II
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13397225.html
Copyright © 2011-2022 走看看